这是后续问题:Difference between self.ivar and ivar? :
self.name = @"hello";
我想知道神奇 setter 方法内部做了什么。所以问题是:任何人都可以发布 setter 方法的源代码吗? ;-) 谢谢!
最佳答案
如果没有属性声明(也就是说,您手动声明了 setter 和 getter 方法),您通常会像这样实现它们:
@interface MyClass : NSObject
{
NSString *name;
}
- (NSString *) name;
- (void) setName:(NSString *) name;
@end
@implementation MyClass
- (void) dealloc
{
[name release];
[super dealloc];
}
- (NSString *) name
{
return name;
}
- (void) setName:(NSString *) aName
{
if (aName != name)
{
[name release];
name = [aName retain];
}
}
@end
原子 setter 可能看起来像这样:
- (void) setName:(NSString *) aName
{
@synchronized(self)
{
if (aName != name)
{
[name release];
name = [aName retain];
}
}
}
关于objective-c - 如何为 ivar 编写我自己的 setter,即 : self. ivar = ...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4150967/