我意识到它会自动为您创建一个 setter 和 getter,但我不确定 setter 的实际“外观”如何。
另外,为什么建议我们说@synthesize someObject = _someObject;
而不是 just @synthesize someObject;
?
我意识到它会自动为您创建一个 setter 和 getter,但我不确定 setter 的实际“外观”如何。
另外,为什么建议我们说@synthesize someObject = _someObject;
而不是 just @synthesize someObject;
?
首先简单一点:你不再需要@synthesize
了。如果你有一个@property
并且你没有综合它,那么它是隐含的,形式为@synthesize someObject = _someObject;
。如果你离开了,= _someObject
那么你将拥有与 相同的东西@synthesize someObject = someObject;
。因此,下划线版本是首选,因为 Apple 已经转而支持实例变量使用下划线,并且它与隐式综合类型一致。
setter 和 getter 的确切形式将取决于atomic
, strong
, unsafe_unretained
, 等标志,但示例非原子强 setter,pre-ARC 是:
- (void)setProperty:(NSString *)newPropertyValue
{
[newPropertyValue retain];
[_property release];
_property = newPropertyValue;
}
请注意,保留始终发生在发布之前。否则如下(你会以迂回的方式到达,而不是直接写):
self.property = _property;
可能会导致_property
在保留之前被释放。
示例吸气剂(也是 ARC 之前的)是:
- (NSString *)property
{
return [[property retain] autorelease];
}
retain
确保即使从中查询的对象被释放,返回值也将保持不变。这autorelease
确保您返回一个非拥有的引用(即,接收者不必明确地处理该事物,它可以在完成时忘记它)。如果返回的东西是不可变的,但实例变量是可变的,那么它是正确的形式,copy
而不是保留,以确保您返回的内容在其他人持有它时不会发生变异。
查看 iPad 和iPhone 应用程序 itunes的第 3 章
_someObj
替换存储对象的内存位置(指针)。Xcode 4 auto @synthesize anyObject = _anyObject;
-> 所以你不需要再写@synthesize
了。
如果您之前在.m 文件中写入了其他对象或 _anyMemoryLocation,如果您不想在.m 文件中重写所有名称,则可以使用 @synthesize yourObj = _anyMemoryLocation。
Setter 和 getter 2 方法用于在类外部或内部设置或获取对象的值:
-(void)setObject:(ObjectType *) object;
-(void)getObject:(ObjectType *) object;
关键的非原子自动为您生成 setter 和 getter。
如果你想实现更多的方法去setObject,你可以在你的.m文件中重写它
-(void)setObject:(ObjectType *) object{
_object = object; //rewrite setter can done anywhere in your.m file
//Add more method
}