mak*_*aed 10 xcode objective-c
在Objective-C中声明属性时,可配置的自定义选项有哪些,它们定义了访问器方法的行为方式?
例如,你可以拥有弱,强,只读.
Pen*_*One 41
这是简短的回答:
原子与非原子主要确保从合成的getter返回完整的值,并且完整的值由合成的setter写入.
readwrite vs readonly确定合成属性是否具有合成访问器(readwrite具有setter并且是默认值,readonly不具有).
assign vs weak vs retain vs copy确定合成访问器如何与Objective-C内存管理方案交互.
而现在的答案很长:
原子v非原子
假设你是@synthesizing方法实现,原子与非原子会改变生成的代码.如果您正在编写自己的setter/getter,则atomic/nonatomic/retain/assign/copy仅仅是建议性的.
使用原子,合成的setter/getter将确保始终从getter返回整个值或由setter设置,而不管任何其他线程上的setter活动.也就是说,如果线程A位于getter的中间,而线程B调用setter,则实际可行的值 - 一个自动释放的对象,很可能 - 将返回给A中的调用者.
在非原子,没有这样的保证.因此,非原子比原子快得多.
原子不做的是对线程安全做出任何保证.如果线程A与线程B同时调用getter并且C调用具有不同值的setter,则线程A可以获得返回的三个值中的任何一个 - 在调用任何setter之前的值或者传递给setter的任一值在B和C中.同样,对象最终可能会得到B或C的值,无法分辨.
确保数据完整性 - 多线程编程的主要挑战之一 - 是通过其他方式实现的.
分配,弱,保留,复制
简而言之,assign vs weak vs retain vs copy确定合成访问器如何与Objective-C内存管理方案交互:
请记住,对创建的对象执行retain/strong(它会增加引用计数),而copy会创建一个新对象.不过,区别在于您是要为对象添加另一个保留还是创建一个全新的对象.
| 归档时间: |
|
| 查看次数: |
8074 次 |
| 最近记录: |