我们知道 如果
@property (retain,nonatomic) NSArray *myArray;
它已经为我们添加了
setMyArray 和getMyArray
我们不必再写这些函数,这样为我们提供了很大的方便,比如说,我们要用很多属性,我们不可能写很多
setter 和getter吧?比如说1000个,这样很不现实。
但是我们也可以使用自己的setter 和getter,怎么说呢?
默认情况下,我们 aa.bb=cc 调用的是 aa的 -setBb:
有时候我们想在setBb中处理一些事情,我们可能需要有自己的setBb
@interface MyViewController : UIViewController
{
NSArray *_arrayTest;
NSArray *myArray;
}
@property (retain,nonatomic,setter = setMyNewArray:) NSArray *arrayTest;
@property (retain,nonatomic) NSArray *myArray;
-(void) setMyNewArray:(NSArray *)ary;
@end
@implementation MyViewController
@synthesize arrayTest=_arrayTest;
@synthesize myArray;
-(void)setArrayTest:(NSArray *)arrayTest
{
//如果我们写了setArrayTest,setter就会调用我们写的setArrayTest,
如果你把下面的注释掉,你试一试 xx.arrayTest=xxx ,你会发现retainCount和没注释前是有变化的
//NSLog(@"set array");
/*
if (![_arrayTest isEqualToArray:arrayTest]) {
[_arrayTest release];
[arrayTest retain];
_arrayTest =arrayTest;
}
*/
}
-(void) setMyNewArray:(NSArray *)ary
{
NSLog(@" set new array");
//处理一些事情
if (![_arrayTest isEqualToArray:ary])
{
[_arrayTest release];
[ary retain];
_arrayTest =ary;
}
}
@end