我是新来的,一般iOS开发,还从来没涉及手动引用计数(保留,释放,自动释放)。 因此我没有什么神奇的ARC正在执行的一个很好的理解。
我想我明白,直到有人问我什么类型的所有制( weak
, strong
, assign
等),应给予一个只读属性的对象指向,如:
@property (readonly,nonatomic) NSString* name;
我读到这里关于ARC只读@property问题 ,离开关strong
/ weak
实际上不会编译除非你当你指定了后备变量@synthesize
财产; 我只是碰巧被指定后盾伊娃这样的:
@synthesize name = _name;
现在我明白了一个变量的默认“终身资格”强,从这里开始: http://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref / DOC / UID / TP40011226-CH1-SW4
因此,削减长话短说-我间接地定义我的财产(readonly,nonatomic,strong)
为_name
伊娃作为隐式声明__strong
。
我有几个问题:
是
strong
正确的寿命限定使用? 我认为是这样,否则我的支持对象NSString*
不会在任何地方拥有,因而将自动释放(从Java土地来这是有道理的,因为所有的引用都默认强)。是否有任何其他修饰,其意义在这种情况下,如
copy
或assign
?是否宣告财产
(readonly,nonatomic,strong)
和(readonly,nonatomic)
使向耗费属性的代码有什么区别? 例如。 并宣布它没有strong
关键字导致待存储的对象的指针作为__unsafe_unretained
其中strong
属性将被存储在一个__strong
指针?
谢谢!
编辑
因此,正如我现在明白了,以下适用于只读属性:
- 对于非NSObject的*类型(整数,浮点,无效*等)使用
(readonly, assign)
。 - 对于对象的指针,使用
(readonly, strong)
或(readonly, copy)
-这些功能同样为只读属性,但如果你扩展/子类,并重新声明财产,你可能希望复制语义readwrite
。 - 对于对象的指针,
(readonly, weak)
才有意义,如果你将要存储在该属性已经疲弱的指针(该指针一定要坚强其他地方或对象将会被释放)。