iOS中@property的默认值是什么?
例如,如果我宣布@property NSString *摄影师;
是默认值(assign)或(保留)还是其他什么?
(原子,非原子)?
我无法从文档中找到此信息。 感谢
答案 0 :(得分:15)
我认为默认值为(atomic, assign)
,但是,您不应将它们留空。
默认值可能随时发生变化,而您正在编写依赖于属性定义的代码。
例如,如果您依赖默认的assign
,并且由于某种原因它将在未来变为retain
,那么您的所有代码都将泄漏。
相反,如果默认值是retain并且您依赖它并且它更改为assign,那么当您不可避免地释放对象时,您的代码将崩溃。
不管它们是什么,都不要依赖任何默认值。
明确定义属性的属性。
答案 1 :(得分:0)
默认情况下,属性是原子的,因此合成访问器提供对多线程环境中属性的强大访问 - 也就是说,无论其他线程同时执行什么,始终完全检索或设置从getter返回的值或通过setter设置的值。
如果指定strong,copy或retain并且未指定nonatomic,则在引用计数环境中,对象属性的合成get访问器使用锁并保留并自动释放返回的值。
我不认为苹果将来会改变它,但遗憾的是最常见的是非原子的,所以你可能不得不把它写下来。