- 涉及: copy关键字 ,dynamic关键字、重命名合成方法名称,重命名实例变量
@interface PersonModel: NSObject
/*strong 是retain 操作,copy 是复制操作*/
@property(nonatomic ,copy) NSString * str;
@property(nonatomic ,copy) NSString * name;
@property(nonatomic ,assign) NSInteger age;
/*isMale 是male 的新getter 方法名*/
@property(nonatomic ,assign,getter=isMale) BOOL male;
@end
@implementation PersonModel
/*_newVariableName 是name 对应的新的实例变量*/
@synthesize name = _newVariableName;
/*dymamic 声明不采用系统默认提供的合成*/
@dynamic age;
- (void)setStr:(NSString *)str{
_str = [str copy];//注意实现属性的特质
}
//重命名name 的实例变量
- (NSString *)name{
return _newVariableName;
}
- (BOOL)isMale{
return _male;
}
@end
//copy 属性测试
NSMutableString * test = [[NSMutableString alloc] initWithString:@"1"];
PersonModel * model = [PersonModel new];
model.str = test;
NSLog(@"%@\n- %@",model.str,test);
[test insertString:@"2" atIndex:1];
NSLog(@"%@\n- %@",model.str,test);//不采用copy时,model.str 会随着test 的变化变化,反之不会变化
model.age = 1;//因为没有提供setter 方法,编译可以通过,但是运行时候会崩溃
网友评论