set get方法
00000.h
//属性(实例变量)声明的区域
//带有下划线的属性
int _age;
NSString *_name;
//不带有下划线的属性
//相当于声明了set get方法
//同种类型的属性可以写在同一行中非基本数据类型的*不共用
//@property的属性可以使用点语法进行操作(打点调用)
@property int age;
@property NSString*name;
set方法
-(void)method1;
00000.m
//@synthesize相当于实现了setget方法这里所以的属性都可以写到一行代码中
//name = _name是规定带下划线的属性和@property的属性是同一个属性
@synthesize age =_age,name =_name;
//调用set方法
[p setAge:22];
//调用get方法
int age =[p age];
//相当于调用set的方法
p.name=@"you";
//相当于调用get的方法
NSString *name= p.name;
-(void)method1 {
NSLog(@"这是一个减号方法");
_age=10;
return;
}
//get方法中不能使用打点调用该属性。因为打点调用的实质就是调用set方法。如果使用打点调用就会造成死循环
// NSLog(@"这是一个减号方法");
// self.age=age;
//总结:打点调用的实质是调用setget方法
//打点调用在等号左边,且距离等号最近的打点调用其实质是调用set方法。在等号右边的打点调用,其实质是调用get方法
MRC的set方法
nonatomic retain assign copy weak strong readonly readwrite(只读属性,不能修改,可以重写set方法或者KVC进行修改)
//retain
-(void)setArray:(NSArray *)array {
//判断是否相等
if(_array!= array) {
//释放旧的对象的内存地址
[_arrayrelease];
//赋值先进行引用计数加1再赋值
_array= [arrayretain];
}
}
//assign
//基本数据类型是栈区由系统管理不需要用户管理
-(void)setNumber:(int)Number {
if(_Number!= Number) {
_Number= Number;
}
}
//copy
//先把旧值释放再把新值进行copy并赋值
-(void)setStr:(NSString *)str {
if(_str!= str) {
//如果对象不同指向新的内存地址之前要先释放旧的值
[_strrelease];
//保留一份新值先copy后赋值
_str= [strcopy];
}
}
1.先判断是否存在相等
2.释放旧的对象内存地址
3.其中retain要先引用计数加1再赋值copy要先copy再赋值
基本数据类型存放在栈区所以assign不用手动释放管理,赋值即可
对于只读属性的重写方法有两种
1.重写set方法
//对于只读属性的话重写set方法可以修改
//-(void)setStr1:(NSString *)str1{
// [_str1 release];
// _str1 = [str1 copy];
//}
self.str1 = @“000”;
2.使用KVC进行修改
KVC———key,value,coding键值编码访问属性
KVO———key.value.observe通知监听(观察)者机制
//self调用
[self setValue:@"0000" forKeyPath:@"str1"];
NSLog(@"%@",self.str1);