我想在访问和更改属性时触发一些代码。我在自己的代码中使用@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仍将被合成。