当getter和setter方法自动合成后,它们的具体代码实现是什么样子的?
从官方文档中,我只找到了一些推荐的实现技巧,但并没有提到编译器在合成过程中使用的哪种方法:http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAccessorMethods.html#//apple_ref/doc/uid/TP40003539-SW5
有些技巧建议实现包含autorelease
消息的代码,这对于多线程编程来说并不十分安全。我想知道自动生成的代码是否遵循了其中某些推荐的实现方式。
例如:
.h
@interface AClass: NSObject{}
@property (nonatomic, retain) AnotherClass *aProp;
@end
.m
@implementation AClass
@synthesize aProp
-(id) init {
if ((self = [super init])) {
self.aProp = [[AnotherClass alloc] init]; // setter invocation
}
return self;
}
-(AnotherClass *) aMethod {
return self.aProp; // getter invocation
}
@end
编译器生成的aProp
等效访问器代码片段是什么?
-(AnotherClass *) aProp {
// getter body
}
-(void) setAProp: (AnotherClass *) {
// setter body
}
-S
选项来生成汇编输出。 - Alexei Sholik