如何为ivar编写我自己的setter,即:self.ivar = ...?

ohh*_*hho 3 objective-c

这是一个后续问题:self.ivar和ivar之间的区别?:

self.name = @"hello";
Run Code Online (Sandbox Code Playgroud)

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

dre*_*lax 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
Run Code Online (Sandbox Code Playgroud)

原子设置器看起来像这样:

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

  • 你的答案只适用于保留属性. (2认同)