如何为ivar写我自己的二传手,即:self.ivar = ...?

时间:2010-11-11 02:41:37

标签: objective-c

这是一个后续问题:Difference between self.ivar and ivar?

self.name = @"hello";

我想知道在魔法 setter方法中做了什么。所以问题是:有人可以发布setter方法的源代码吗? ;-)谢谢!

2 个答案:

答案 0 :(得分:11)

没有属性声明(也就是说,你手动声明了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

Atomic setters看起来像这样:

- (void) setName:(NSString *) aName
{
    @synchronized(self)
    {
        if (aName != name)
        {
            [name release];
            name = [aName retain];
        }
    }
}

答案 1 :(得分:3)