黑马程序员技术交流社区

标题: 关于NsMutableArray的removeObject问题 [打印本页]

作者: gaoxinglei123    时间: 2014-4-30 08:25
标题: 关于NsMutableArray的removeObject问题
本帖最后由 gaoxinglei123 于 2014-5-4 07:38 编辑

NsMutableArray *array = [NsMutableArray arrayWithObjects:@"jack",@"bbb",nil];
[array removeObject:@"jack"];用来移除array中的@"jack"对象。我理解的是判断@"jack"的内容和数组中的内容进行比较。如果相等就移除。
如果是普通对象呢。例如[[Person alloc]  init]和[[Person alloc] init]相等么。或者是怎么判断他们是否相等的?

作者: siegee    时间: 2014-4-30 10:07
[array removeObject:person];
数组中存的对象的地址,所以,array会根据地址判断是否是相同的对象,会删除整个数组中的所以指向person对象的地址;例如:
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Person *person=[[Person alloc] init];
        NSMutableArray *arr=[[NSMutableArray alloc] initWithObjects:person,person,@"dfsfs",nil];
        [arr removeObject:person];
        NSLog(@"%@",arr);
    }
    return 0;
}

打印结果:
2014-04-30 09:59:32.927 eqrewrwe[607:303] (
    dfsfs
)

作者: gaoxinglei123    时间: 2014-4-30 10:18
马凯文 发表于 2014-4-30 08:38
removeObject传进去的就是id类型,传需要删除的元素的名称就可以
[ init] 和 [ init]不表示同一个对象,他 ...

@"jack";@"jack";两个对象应该也是不同的内存空间吧?
作者: siegee    时间: 2014-4-30 10:24
gaoxinglei123 发表于 2014-4-30 10:18
@"jack";@"jack";两个对象应该也是不同的内存空间吧?

数组存的不是对象本身,是对象在内存的所在地址。
这个两个常量字符串本身所指对象是一个,系统只会在数据段开辟一个空间来存储,不行你去打印试试;
作者: gaoxinglei123    时间: 2014-4-30 10:28
马凯文 发表于 2014-4-30 10:22
不是同一个,他们只是保存的相同的字符串内容,但是是完全没有联系的两个字符串。 ...

那么[array removeObject:@"jack"];应该是通过比较两个字符串内容去移除字符串呢吗?
作者: gaoxinglei123    时间: 2014-4-30 10:30
siegee 发表于 2014-4-30 10:24
数组存的不是对象本身,是对象在内存的所在地址。
这个两个常量字符串本身所指对象是一个,系统只会在数据 ...

楼上好像和你说的不一样。。我没有环境 所以没法试,我知道java里的字符串 应该是这样的。
作者: siegee    时间: 2014-4-30 10:33
哥们儿, 你可以结束提问了;
作者: gaoxinglei123    时间: 2014-5-4 07:38
马凯文 发表于 2014-4-30 12:38
前面可能有些误导,不好意思!重新整理了下,
先看段代码
打印结果

嗯 谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2