iOS开发:属性修饰符及copy与mutablecopy比较
来源:互联网 发布:linux常用查看命令 编辑:程序博客网 时间:2024/04/29 06:51
一 属性配置
(一) 属性访问限定符
@public 共有的
@private 私有的,子类也不能使用
@protected 受保护的,子类可以使用
(二) 属性修饰符
1.线程相关
atomic:原子访问,线程安全,效率不高
nonatomic:非原子访问,线程不安全,效率高(默认)
2.内存相关
非ARC
retain:修饰对象类型,表示强引用(持有一次,引用计数加一)
assign:修饰基本数据类型,修饰对象类型时表示弱引用(引用计数不会加一)
copy:修饰对象类型,表示拷贝,浅拷贝时相当于retain,深拷贝就是开辟新的空间
ARC
strong:强引用,修饰对象类型,相当于非ARC下的retain
weak:弱引用,相当于assign
3.是否生成setter、getter方法
readwrite:可读可写,同时生成setter、getter
readonly:只读,只生成getter
二 copy与mutablecopy的简单分析
(一)深拷贝和浅拷贝
浅拷贝:拷贝指针,不开辟新的内存空间,相当于retain,该指针和原指针共同指向一个内容空间
深拷贝:拷贝内容,开辟新的空间,该指针指向这个空间
(二)copy和mutablecopy区别
不可变对象的copy是浅拷贝
可变对象的copy是深拷贝,副本是不可变的
不可变对象的mutablecopy是深拷贝,结果是可变的
可变对象的mutablecopy也是深拷贝,结果是可变的
总结:只有不可变对象的copy是浅拷贝,copy的副本不可变,mutablecopy的副本可变。
(三)用copy修饰属性
由于不管对何种对象或数据类型的copy,所产生的副本都是不可变的,所以我们常常对不希望内容改变的属性(NSString NSArray NSDictionary等),用copy修饰,这样安全性更高。
(四)自定义拷贝
通过对- (id)mutableCopyWithZone:(NSZone *)zone;- (id)copyWithZone:(NSZone *)zone;方法进行重写,它们的区别在于一个返回的对象是可变的,一个是不可变的。这里需要注意的一点是,只有iOS原生的类才自动遵守NSCoding、NSCoping、NSMutablecoping协议,所以自定义类的时候,记得添加协议。
(五)伪复制
这个大家常说的伪复制不过是在重写copy协议方法的时候,不将一个对象的属性全部复制,而复制其中一部分,这也体现了copy的灵活性。
0 0
- iOS开发:属性修饰符及copy与mutablecopy比较
- 属性修饰copy;copy、mutableCopy;NSCopying NSMutableCopying
- iOS开发之copy与mutableCopy
- ios copy 与 mutablecopy
- iOS copy与mutableCopy
- iOS-copy与mutableCopy浅析
- iOS 属性修饰符strong还是copy?
- iOS 属性修饰符Copy 还是Strong
- iOS之 深入探究copy与mutableCopy
- iOS开发-------属性用copy、strong修饰的区别
- iOS开发 -- 属性用copy、strong修饰的区别
- iOS开发-------属性用copy、strong修饰的区别
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解(shallow copy and deep copy)
- iOS Copy与MutableCopy 和 Copy与Strong 深度解析
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解
- 特征检测和跟踪经典理论
- 插入排列与绝对值排列
- 详细分析罕见的ClassCircularityError异常导致的StackOverflowError
- NuttX_初始化流程
- OpenCV基本数据类型
- iOS开发:属性修饰符及copy与mutablecopy比较
- 角色+武器
- 求集合{1,2,...,n}的长度小于M(M<=n)的所有子集
- HDU 2046 骨牌铺方格
- java.sql.SQLException: The Network Adapter could not establish the connection
- BZOJ 2342 SHOI 2011 双倍回文 Manacher
- 3. PDOStatement 对象
- Android中的线程池和AsyncTask异步任务(一)
- 毕业设计(二)——基于深度学习的一类图像共性特征提取 (caffe)