Jac*_*nkr 21 properties class ios
这是希望,我可以一个问题的两个部分了解更多的话题.
1)在我看来,你有两个流行的用于声明属性的选项类在objective c.一种是将属性添加到标题的类主体中,例如.
@interface MyClass : NSObject {
NSArray *myArray;
}
Run Code Online (Sandbox Code Playgroud)
或者你也可以在以后添加它@interface的身体和之前@end的语句,像这样.
@interface MyClass : NSObject {
//
}
@property (nonatomic, retain) NSArray *myArray;
Run Code Online (Sandbox Code Playgroud)
这两种"风格"之间有什么区别?你何时选择其中一种?
2)在@property你找到诸如的选项之后(nonatomic, retain).那些是什么以及为什么/何时使用不同的选项?
Ric*_*III 47
以下是Xcode识别的唯一属性修饰符:
nonatomic (不强制对属性进行线程安全,主要是在整个程序中只使用一个线程时使用)atomic (对属性强制执行线程安全,主要用于在整个程序中使用多个线程时)(默认)retain/ strong(自动保留/释放set上的值,确保值不会意外解除分配)(默认情况下,如果ARC和对象类型)readonly (不能设置属性)readwrite (可以设置和获取属性)(默认)assign/ unsafe_unretained(不应对此属性进行内存管理,由分配值的人员手动处理)(默认情况下,如果不是ARC或对象类型)copy (在设置之前复制对象,如果值集不能因外部因素(字符串,数组等)而改变.weak (如果对象被释放,则自动将引用置零,并且不保留传入的值)getter=method (设置用于获取此属性值的选择器)setter= method (设置用于设置此属性值的选择器)Sim*_*mon 29
1)@property是一种定义getter和setter方法的特殊方法,或者我们称之为Objective-C中的访问器.你的第一个片段只是声明一个你必须自己声明和编写访问器的数组.例如setMyArray:和myArray.
使用@property将为您声明您的访问者,相当于声明setMyArray:和您myArray自己.从Objective-C 2.0开始,这是声明访问器的首选方法.请注意,您仍然必须自己声明属性(在您的情况下为myArray).
2)您首先需要了解@synthesize.请记住@property声明属性的访问者,@synthesize将实现它们.当你在@interface中使用@property时,你很可能在@implementation中写一个@synthesize.使用@synthesize相当于实现setMyArray:和myArray.
这些属性(nonatomic, retain)告诉编译器,以及内存管理应该如何工作,以及如何实现这些方法.请注意,您实际上从未真正看到这些访问者,但请确保它们已存在并准备好供您使用.
要阅读有关该主题的更多信息,我建议您阅读以下教程中的第9节"属性" 或购买涵盖Objective-C简介的书籍.
您还应该熟悉至少以下属性:
readwrite(默认)或readonly.如果readonly设置,则只有getter方法可用.assign(默认),只需指定新值.您最有可能只将其用于原始数据类型.retain,释放旧值并保留新值.如果使用垃圾收集器,retain则相当于assign.为什么?旧值的手动释放将由垃圾收集器完成.copy将复制新值并释放旧值.这通常与字符串一起使用.atomic(默认)将确保setter方法是原子的.这意味着只有一个线程可以一次访问setter.nonatomic,当你不使用线程时使用它.这篇文章为您提供了很好的内存管理介绍assign,retain以及copy.