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

标签 objective-c

这是后续问题: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/

相关文章:

ios - 使用arc4random ios的概率方程

ios - 如何向 iOS 项目的倒计时器添加时间

ios - UITextField 的 NSLayoutConstraints - 错误

ios - viewDidLoad 与调用 super viewDidLoad

objective-c - Objective C 链接调用

ios - 如何去除 UITableView 中的缩进?

ios - 什么是正式协议(protocol)对象

objective-c - 为什么不调用 didRegisterForRemoteNotificationsWithDeviceToken

objective-c - 如何知道NSDictionary中的键值是NSString还是另一个NSDictionary?

ios - 使用返回的 JSON 值设置 NSString