有人能详细解释一下,当我必须为声明的属性使用每个属性:nonatomiccopystrongweak等等,并解释每个属性的作用吗?举个例子也不错.我用的是ARC.

推荐答案

非原子的

非原子的将通过@synthesize访问器生成线程安全 routine .atomic将生成线程安全访问器,因此atomic个变量是线程安全的(可以从多个线程访问,而无需修改数据)

复制

当对象是可变的时,copy是必需的.如果需要对象当前的值,并且不希望该值反映对象的其他所有者所做的任何更改,请使用此选项.由于要保留副本,因此在使用完对象后需要释放该对象.

分配

分配copy有点相反.调用assign属性的getter时,它返回对实际数据的引用.通常,当您有一个基本类型的属性(float、int、BOOL…)时,您会使用这个属性

保持

当属性是指向堆上分配的引用计数对象的指针时,retain是必需的.分配应该类似于:

NSObject* obj = [[NSObject alloc] init]; // ref counted var

@synthesize生成的setter将在复制对象时向其添加引用计数,以便在原始副本超出范围时不会自动销毁基础对象.

完成后需要释放该对象.@property秒使用retain将增加引用计数并占用自动释放池中的内存.

坚强的

strong是保留属性的替换,作为Objective-C自动参考计数(ARC)的一部分.在非ARC代码中,它只是retain的同义词.

这是一个了解iOS 5的strongweak的好网站.

Weak

weakstrong类似,只是它不会将引用计数增加1.它不会成为该对象的所有者,而只是持有对该对象的引用.如果对象的引用计数降至0,即使您可能仍在此处指向它,它也将从内存中释放.

上面的链接包含了关于Weak and 坚强的.的好信息

Objective-c相关问答推荐

react 本机WebView菜单项目props 无法在iOS&>=16上使用

在 Objective-C 中完成受保护属性的解决方法

如何在情节提要中为视图控制器提供标识符?

在@implementation 而不是@interface 定义的类变量?

如何使用 Cocoa 创建临时文件?

NSUserDefaults 的限制是什么?

在 iOS 和 Mac OS X 应用程序中使用 C++

iOS 7 状态栏与 NavigationBar 冲突

iOS NSLayoutConstraint 使用 constraintWithItem 固定宽度

如何从 AVPlayer(不是 AVAudioPlayer)获取持续时间?

在Objective-C中替换字符串中的多个字符?

iOS 8 Mapkit Objc 无法获取用户位置

在 iOS UILabel 上设置 BOLD 字体

发送通知到山狮通知中心

当 UIView 框架更改时,视图内的 AVPlayer 层不会调整大小

如何在 xcode 项目中启用/禁用 ARC?

有没有办法在不使用 UINavigationController 的情况下更改 Storyboard 中 UINavigationBar 的高度?

如何在没有死锁的情况下同步调度主队列?

如何调整 UIToolBar 左右内边距

无法在 iOS7 上将 UITextField 添加到 UIAlertView ...在 iOS 6 中有效