美文网首页
@property指示符copy相关知识

@property指示符copy相关知识

作者: LamSpeech | 来源:发表于2020-04-10 18:15 被阅读0次

    近期空闲时间在重新加深OC基础相关方面的学习,这里记录一下属性指示符copy相关知识和引申出来的对象复制等知识。


    1、 copy指示符

    使用copy指示符修饰的属性赋值时会重新申请一份内存并赋予相同的内容,两个指针指向不同的内存地址。

    copy一般用来修饰具有对应可变类型子类的对象。 如:NSString,NSArray和NSDictionary等。 

    为确保不可变对象不被可变子类影响,需要完全拷贝一份,如果不使用copy而采用strong等修饰则会因为多态特性导致属性值后续操作被改变。

    使用strong修饰 使用copy修饰

    通过上面测试就能看出copy指示符的优势及作用所在了。

    日常开发中copy还被用来修饰block类型,这主要是因为block类型在MRC环境时默认会被分配在栈区,而栈区的内容不需要程序员管理,系统自动分配并且自动销毁。所以需要使用copy将block拷贝到堆区来防止野指针的错误。

    对于可变对象类型,如NSMutableString、NSMutableArray和NSMutableDictionary等则不可以使用copy修饰,因为苹果Foundation框架提供的这些类都实现了NSCopying协议,使用copy方法返回的都是不可变对象,所以对于可变对象使用strong修饰符即可。

    2、copy和mutableCopy之对象拷贝

    苹果Foundation框架中提供的很多类型已经帮我们实现了上述两个方法,因此我们可以使用copy方法和mutableCopy方法来拷贝一个对象。

    对于不可变类型,使用copy方法时是浅拷贝,只拷贝指针,因为内容是不会变化的。使用mutableCopy时由于返回可变对象因此需要一份拷贝,供其他对象使用。对于可变类型,不管是copy还是mutableCopy均会进行深拷贝,所指向指针不同。

    3、copy和mutableCopy之自定义对象拷贝

    当开发过程中需要拷贝一个自定义对象时,这时我们需要让拷贝的对象遵守NSCopying或NSMutableCopying协议。

    然后对应实现copyWithZone:和mutableCopyWithZone:两个方法即可实现。

    相关文章

      网友评论

          本文标题:@property指示符copy相关知识

          本文链接:https://www.haomeiwen.com/subject/cffauhtx.html