我看到了对于int、BOOL等的readwrite属性,跟nonatomic和assign一样。
我有些困惑。我知道在非原生对象上,我们通常使用nonatomic,retain。
我看到了对于int、BOOL等的readwrite属性,跟nonatomic和assign一样。
我有些困惑。我知道在非原生对象上,我们通常使用nonatomic,retain。
以下是简要答案:
atomic
vs nonatomic
主要确保从合成的getter方法中返回完整的值,以及由合成的setter方法写入完整的值(atomic是默认的)。
readwrite
vs readonly
确定合成属性是否具有合成的访问器(readwrite具有setter并且是默认的,readonly则没有)。
assign
vs retain
vs copy
确定合成的访问器如何与Objective-C内存管理方案交互:
assign
是默认的,并且只执行变量赋值retain
指定在分配时应将新值发送给-retain,旧值则发送-release
copy
指定在分配时应将新值发送到-copy,旧值则发送-release
。在阅读了许多文章、Stack Overflow的帖子和制作演示应用程序以检查变量属性特性后,我决定将所有属性信息汇总在一起。
因此,下面是详细的文章链接,在那里你可以找到上述所有属性,这肯定会对你有所帮助。非常感谢所有在这里提供最佳答案的人!!
例如:
@property (nonatomic, retain) NSString *name;
@synthesize name;
示例:
@property (nonatomic, assign) NSString *address;
@synthesize address;
只读属性
示例:
@property (nonatomic, readonly) NSString *name;
@synthesize name;
示例:
@property (nonatomic, readwrite) NSString *name;
@synthesize name;
readwrite
表示属性具有 getter 和 setter 方法;与之相对的是 readonly
。通常情况下,你只需要在一个类扩展中显式声明一个属性为 readwrite
,而不是在公共接口中声明该属性为 readonly
— 这样它就会被公开为只读属性,但在内部你可以进行读写操作。
readwrite
жҳҜеҫҲйҮҚиҰҒзҡ„гҖӮ - rolling_codesreadwrite
没有指定内存管理。您需要同时为属性列出内存管理属性。 - Chuck.h
文件中将一个属性声明为readonly
,并在.m
文件中将同一属性声明为weak
和readwrite
,但编译器抱怨它不能被弱引用,因为它在.h
中被声明为强引用。看来只有readonly
属性会被视为由__strong
iVar支持。 - Vishal Singh