ARC中@property的copy属性与copy方法

1、�可变对象的属性


@property (nonatomic, copy) NSMutableArray *arr;
NSMutableArray *arr0 = [NSMutableArray arrayWithObjects:@"0",@"1",@"2", nil];
self.arr = arr0;
NSLog(@"%@",[self.arr class]);

因为arr的@property是copy属性,所以self.arr = arr0;实际上为self.arr = [arr0 copy];,copy方法会返回一个不可变对象NSArray,所以Log打印出__NSArrayI,(immutable array)。就算手动写成self.arr = [arr0 mutableCopy],依然会执行self.arr = [[arr0 mutableCopy]copy];,自动在最后加上copy的。这时候只需要把属性改成strong就好。

2、不可变对象的属性


@property (nonatomic, strong) NSArray *arr;
NSMutableArray *arr0 = [NSMutableArray arrayWithObjects:@"0",@"1",@"2", nil];
self.arr = arr0;
NSLog(@"%@",[self.arr class]);

因为arr的@property是�strong属性,所以self.arr = arr0;实际上为self.arr = [arr0 �retain];,retain方法(在ARC中不能显式使用)只是增加引用计数,不改变对象本身,所以Log打印出`__NSArrayM�。所以这就是为什么不可变对象一般声明为copy类型,因为给这个对象赋值时,直接会隐性调用copy方法,返回不可变对象。

3、常用场景

- (NSArray *)children
{
    // Note: DDXMLNamespaceNode overrides this method
    
#if DDXML_DEBUG_MEMORY_ISSUES
    DDXMLNotZombieAssert();
#endif
    
    if (!IsXmlDocPtr(genericPtr) && !IsXmlNodePtr(genericPtr) && !IsXmlDtdPtr(genericPtr))
    {
        return nil;
    }
    
    NSMutableArray *result = [NSMutableArray array];
    
    xmlNodePtr child = ((xmlStdPtr)genericPtr)->children;
    while (child != NULL)
    {
        [result addObject:[DDXMLNode nodeWithUnknownPrimitive:(xmlKindPtr)child owner:self]];
        
        child = child->next;
    }
    
    return [result copy];
}

上述代码来源KissXML库,方法返回值为NSArray *类型,return [result copy];中的result为NSMutableArray *,调用copy方法,就返回一个不可变的NSArray *类型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的事...
    irenb阅读 5,256评论 1 21
  • 【2017年最新】☞ iOS面试题及答案 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经...
    紫色冰雨阅读 623评论 0 1
  • 设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型的...
    琦均煞Sylar阅读 428评论 0 0
  • 今晚在刷朋友圈的时候,看见朋友分享了一篇文章,标题无非是老套的“打工旅行她活出了自己想要的样子”。这种文章...
    西瓜超人阅读 470评论 0 0
  • 我们的生活是无处不广告,打开任何一个网页,都会看到那些五花八门的广告漫天飞,广告已经成了我们生活中的一部分。广告给...
    沈姐说说阅读 413评论 2 5