使用@synthesize时如何提供访问者方法的其他自定义实现?

6 cocoa cocoa-touch objective-c accessor

我想在访问和更改属性时触发一些代码.我在我的代码中使用@property@synthesize我的ivars.属性被保留,所以我想保留自动生成的内存管理内容@synthesize.

但是,我假设@synthesize告诉编译器在哪里生成访问器方法代码@synthesize is,所以大多数情况都在代码的顶部,对吧?

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

-(void)setFoo {
    // custom stuff
}
Run Code Online (Sandbox Code Playgroud)

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

jbr*_*nan 5

你可以用@property@synthesize,就像平时那样,而是提供了一个自定义的setter或getter(或两者)以及那些将被代替使用.通常我会做这样的事情:

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

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

    //custom code here
}
Run Code Online (Sandbox Code Playgroud)

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