好的 - 新手 Objective-C 问题:
声明属性时,有如下属性:
@property (weak, nonatomic)
我意识到我需要阅读这篇文章才能完全理解它,但我发现的大部分内容都是参考资料,因此可以链接到一篇可以解释最佳实践/使用场景的好文章(何时将哪个属性用于原语、引用类型、出口等)或几个例子将不胜感激。
谢谢!
好的 - 新手 Objective-C 问题:
声明属性时,有如下属性:
@property (weak, nonatomic)
我意识到我需要阅读这篇文章才能完全理解它,但我发现的大部分内容都是参考资料,因此可以链接到一篇可以解释最佳实践/使用场景的好文章(何时将哪个属性用于原语、引用类型、出口等)或几个例子将不胜感激。
谢谢!
即使答案太晚了,我在谷歌搜索同一问题时发现了这个问题,并且还发现了苹果的这篇文章,它完美地解释了整个事情。
希望对正在研究相同事物的人有所帮助,
从我最近的一堂课上讲(受保罗·赫加蒂的启发)
nonatomic - 不是线程安全的,请参阅Justin在上面的评论中指出的链接。
强(或保留) - 保持分配此对象,直到我不再指向它(将其设置为 nil)。如果我不再被强烈指出(我得到了dealloc'd),编译器也会把它从堆中抛出(释放它)
弱 - 只要有东西仍然强烈指向它,就保持分配这个对象。IBOutlets 通常被声明为weak,因为它们会被视图控制器自动保留。
原始类型不在堆上分配,也不使用强或弱
原子性与线程有关,对于新手来说是一个相当高级的话题。然而,简短的回答是 iOS 属性总是被声明为非原子的。这是有关它的一些更详细的信息。
弱/强关键字与 ARC 的内存管理和防止所谓的保留循环有关。对于新手来说,这也可能是一个艰难的概念,但高级概述是,当两个对象彼此具有强引用时会发生保留循环,因此两个对象都不会被 ARC 销毁。这是内存泄漏的一种形式,因为您可能有一个不再使用但仍在占用内存的对象。通过将属性声明为弱,它将确保它不会被自动销毁,只要某些东西仍然具有对其的强引用。例如,假设您有一个数组,其中包含几个对象。其中两个对象具有相互强引用。然后,该数组失去其所有者并被销毁。但,该数组中相互指向的两个对象不会被破坏,因为它们具有强引用。因此,您有两个无法访问的对象,因为拥有的数组已被破坏,但它们仍在占用内存。