A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gaoxinglei123 中级黑马   /  2014-4-30 08:25  /  7748 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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]相等么。或者是怎么判断他们是否相等的?

评分

参与人数 1技术分 +1 收起 理由
脸皮猴 + 1

查看全部评分

10 个回复

正序浏览
马凯文 发表于 2014-4-30 12:38
前面可能有些误导,不好意思!重新整理了下,
先看段代码
打印结果

嗯 谢谢
回复 使用道具 举报
siegee 中级黑马 2014-4-30 10:33:58
9#
哥们儿, 你可以结束提问了;
回复 使用道具 举报
siegee 发表于 2014-4-30 10:24
数组存的不是对象本身,是对象在内存的所在地址。
这个两个常量字符串本身所指对象是一个,系统只会在数据 ...

楼上好像和你说的不一样。。我没有环境 所以没法试,我知道java里的字符串 应该是这样的。
回复 使用道具 举报
马凯文 发表于 2014-4-30 10:22
不是同一个,他们只是保存的相同的字符串内容,但是是完全没有联系的两个字符串。 ...

那么[array removeObject:@"jack"];应该是通过比较两个字符串内容去移除字符串呢吗?
回复 使用道具 举报
gaoxinglei123 发表于 2014-4-30 10:18
@"jack";@"jack";两个对象应该也是不同的内存空间吧?

数组存的不是对象本身,是对象在内存的所在地址。
这个两个常量字符串本身所指对象是一个,系统只会在数据段开辟一个空间来存储,不行你去打印试试;
回复 使用道具 举报
马凯文 发表于 2014-4-30 08:38
removeObject传进去的就是id类型,传需要删除的元素的名称就可以
[ init] 和 [ init]不表示同一个对象,他 ...

@"jack";@"jack";两个对象应该也是不同的内存空间吧?
回复 使用道具 举报
[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
)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马