我想在访问和更改属性时触发一些代码。我在自己的代码中使用@property@synthesize来表示自己的Ivars。这些属性将保留,因此我想保留@synthesize自动生成的内存管理内容。

但是,我假设@synthesize告诉编译器在@synthesize is的位置正确地生成访问器方法代码,因此大多数情况在代码顶部,对吗?

当我有一个属性foo时,我得到-setFoo-foo方法。然后,我可以制作一个这样的方法来在更改属性时执行更多自定义代码吗?

-(void)setFoo {
    // custom stuff
}

现在这是一个问题。如何执行第一个?我不想在这里有个不同的名字。也许有一种方法可以让@synthesize指令为getter和setter方法创建其他名称,然后我可以轻松地调用这些名称?而且我仍然可以使用点语法然后访问它们?

最佳答案

您可以像平常一样使用@property@synthesize,但是提供自定义的setter或getter(或两者),而将使用它们。通常,我会做这样的事情:

// Override the setter
- (void)setName:(NSString *)aName
{
    if (name == aName)
        return;

    [name release];
    name = [aName retain];

    //custom code here
}

当我使用set属性时,它将调用我的自定义方法。但是,get仍将被合成。

10-07 19:49
查看更多