set get方法
00000.h
//屬性(實(shí)例變量)聲明的區(qū)域
//帶有下劃線的屬性
int _age;
NSString *_name;
//不帶有下劃線的屬性
//相當(dāng)于聲明了set get方法
//同種類型的屬性可以寫(xiě)在同一行中非基本數(shù)據(jù)類型的*不共用
//@property的屬性可以使用點(diǎn)語(yǔ)法進(jìn)行操作(打點(diǎn)調(diào)用)
@property int age;
@property NSString*name;
set方法
-(void)method1;
00000.m
//@synthesize相當(dāng)于實(shí)現(xiàn)了setget方法這里所以的屬性都可以寫(xiě)到一行代碼中
//name = _name是規(guī)定帶下劃線的屬性和@property的屬性是同一個(gè)屬性
@synthesize age =_age,name =_name;
//調(diào)用set方法
[p setAge:22];
//調(diào)用get方法
int age =[p age];
//相當(dāng)于調(diào)用set的方法
p.name=@"you";
//相當(dāng)于調(diào)用get的方法
NSString *name= p.name;
-(void)method1 {
NSLog(@"這是一個(gè)減號(hào)方法");
_age=10;
return;
}
//get方法中不能使用打點(diǎn)調(diào)用該屬性宠蚂。因?yàn)榇螯c(diǎn)調(diào)用的實(shí)質(zhì)就是調(diào)用set方法。如果使用打點(diǎn)調(diào)用就會(huì)造成死循環(huán)
// ???NSLog(@"這是一個(gè)減號(hào)方法");
// ???self.age=age;
//總結(jié):打點(diǎn)調(diào)用的實(shí)質(zhì)是調(diào)用setget方法
//打點(diǎn)調(diào)用在等號(hào)左邊,且距離等號(hào)最近的打點(diǎn)調(diào)用其實(shí)質(zhì)是調(diào)用set方法纲熏。在等號(hào)右邊的打點(diǎn)調(diào)用挎狸,其實(shí)質(zhì)是調(diào)用get方法
MRC的set方法
nonatomic? retain? assign copy weak strong readonly readwrite(只讀屬性,不能修改,可以重寫(xiě)set方法或者KVC進(jìn)行修改)
//retain
-(void)setArray:(NSArray *)array {
//判斷是否相等
if(_array!= array) {
//釋放舊的對(duì)象的內(nèi)存地址
[_arrayrelease];
//賦值先進(jìn)行引用計(jì)數(shù)加1再賦值
_array= [arrayretain];
}
}
//assign
//基本數(shù)據(jù)類型是棧區(qū)由系統(tǒng)管理不需要用戶管理
-(void)setNumber:(int)Number {
if(_Number!= Number) {
_Number= Number;
}
}
//copy
//先把舊值釋放再把新值進(jìn)行copy并賦值
-(void)setStr:(NSString *)str {
if(_str!= str) {
//如果對(duì)象不同指向新的內(nèi)存地址之前要先釋放舊的值
[_strrelease];
//保留一份新值先copy后賦值
_str= [strcopy];
}
}
1.先判斷是否存在相等
2.釋放舊的對(duì)象內(nèi)存地址
3.其中retain要先引用計(jì)數(shù)加1再賦值copy要先copy再賦值
基本數(shù)據(jù)類型存放在棧區(qū)所以assign不用手動(dòng)釋放管理,賦值即可
對(duì)于只讀屬性的重寫(xiě)方法有兩種
1.重寫(xiě)set方法
//對(duì)于只讀屬性的話重寫(xiě)set方法可以修改
//-(void)setStr1:(NSString *)str1{
//? ? [_str1 release];
//? ? _str1 = [str1 copy];
//}
self.str1 = @“000”;
2.使用KVC進(jìn)行修改
KVC———key,value,coding鍵值編碼訪問(wèn)屬性
KVO———key.value.observe通知監(jiān)聽(tīng)(觀察)者機(jī)制
//self調(diào)用
[self setValue:@"0000" forKeyPath:@"str1"];
NSLog(@"%@",self.str1);