How to choose the attributes of a @property in a nutshell?
如何快速知道要添加到@property中的属性?
我是为@property (strong)和@property (weak)而得到的,我认为:strong如果类"拥有"所指的实例;weak如果它仅仅是对一个对象的引用,而这个对象的存在不被我们当前的类所管理。
如果属性是通过从Interface Builder中拖放创建的,则有时会有神秘的unretain_unsafe左右。听起来很复杂,但我相信Xcode知道它的作用…
我也理解,retain和assign是不赞成的……
对于NSString属性,最好(强制)使用copy…
但是如果我想要一个@property到一个int或者一个enum呢?
如果我的@property指向一个单例,我应该选择weak属性吗?
你看:关于这些属性的问题太多了!
我想,像这里的一些成员一样,对这些属性有一个简短而清晰的解释是很好的:)
一些没有特别顺序的笔记
- weak的附加功能是在释放所引用的对象时将其清空,因此不会留下指向垃圾的悬空指针。
- 不强制使用copy语义和NSString属性,但强烈建议使用。虽然NSString是不可变的,但您的属性可能被设置为可变的字符串子类,因此如果您不希望它从您的下面更改,您应该使用copy。
- 标量属性类型的经验法则非常简单:它们不进行引用计数,因此strong和weak都不适用。但它们可以是readonly或readwrite,这取决于您需要什么。
- So:For scalar properties,I can(should)put no property.I guess it is equivalent to EDOCX1.Thanks for your answer,i t is nice points(I did't know them,ESP.Point 1 and 2)!喂
- @Colas:They should still be properties,but you should not choose any ownership behavior(strong/weak/copy),since there is no ownership to be had.EDOCX1 is a different issue,which is whether the property can be changed or not,and is a valid choice to make for all properties.
- I would add that EDOCX1 plication 2 welcome 2 should be used for any and all copyable objects,not just strings.
- @Peterhosey:Sorry,I meant"for scalar properties,I can put no attribute"I guess EDOCX1 theocx1 plus 3 is equivalent to EDOCX1 plus 4.Thanks!
- @Colas:That's true,but IMHO stating it explicitly make things more readable,especially if others are using your code base and might be surprised by the read/write seminatics.