日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Property属性,amp;nbsp;KVC键值编码OC…

發(fā)布時(shí)間:2025/3/20 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Property属性,amp;nbsp;KVC键值编码OC… 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、屬性:幫你自動(dòng)生成setter 和 getter 方法 ???? 屬性的聲明:(寫在.h中) ???? 格式: @property 數(shù)據(jù)類型 屬性名 ???? 屬性的實(shí)現(xiàn):(寫在.m中) ???? 格式: @synthesize 屬性名: 例子1: Person.h @interface Person : NSObject //屬性的聲明:屬性:屬性名就是實(shí)例變量名去掉下劃線
@property NSString *gender;
@end
Person.m //屬性的實(shí)現(xiàn) @synthesize gender; @end
main.m //屬性方法實(shí)現(xiàn)gender的setter和getter方法
??? person.
gender = @"妖";
???
NSLog(@"%@",person.gender);//點(diǎn)語法
???NSLog(@"%@",[person gender]);//setter、getter方法 例子2: teach.h @interface Teacher : NSObject //輸入屬性的類型相同的話,此時(shí)就可以把它們寫在一個(gè)屬性聲明中,但是每一個(gè)屬性名前要加*,(是基本數(shù)據(jù)類型的就不用加*) @property NSString *name,*color;
@property NSInteger age;
@property CGFloat score; @end
teach.m //屬性的實(shí)現(xiàn)部分可以寫在一起,用逗號隔開 //@synthesize name,color,age,score; //自Xcode5.0之后屬性實(shí)現(xiàn)部分不應(yīng)寫了,極大提高了變成速率 //如果不寫了,系統(tǒng)默認(rèn)幫你生成以下語句,自動(dòng)創(chuàng)建一個(gè)_name實(shí)例變量,并且自動(dòng)生成setter 和getter方法 //如果實(shí)例變量不寫
//@synthesize name = _name;
- (
NSString *)description
{??? +++++++++description 中不能打印self+++++++++++ ???// return [NSString stringWithFormat:@"%@-%ld-%.2lf-%@-%@", _name,_age,_score,_color,self]; ? ? ? ?(1)ERROR!!! ??? return [NSString stringWithFormat:@"%@-%ld-%.2lf-%@", _name,_age,_score,self.color];//這樣是可以的 }? 屬性的優(yōu)化 ?1.屬性的聲明和實(shí)現(xiàn)可以合并
?2.實(shí)現(xiàn)可以省略實(shí)例變量的聲明(系統(tǒng)自動(dòng)幫你生成屬性名 加下劃線的實(shí)例變量 如:_name)
?3.屬性的實(shí)現(xiàn)可以省略
main.m ? //定義一個(gè)Teacher類,實(shí)例變量name age score color ??? //定義一個(gè)Teacher對象
???
Teacher *tea = [[Teacher alloc]init];
??? tea.
name = @"小倉";
??? tea.
age = 18;
??? tea.
score = 85.3;
??? tea.color = @"純白種人"; ??? NSLog(@"%@-%ld-%.2lf-%@",tea.name,tea.age,tea.score,tea.color); ???NSLog(@"%@",tea); ====================================================== 2、屬性的屬性:屬性的修飾符 ? 主要用來控制setter 和 getter 的方法的實(shí)現(xiàn)細(xì)節(jié) ????1.訪問控制組 atomic:原子性,修飾的屬性同一時(shí)刻只能使用setter 或getter,(setter和getter 是互斥的),安全但效率低; ???????? atomic 使用場景:在多線程下為保護(hù)數(shù)據(jù)安全可以使用atomic ? ? ? ? ? ? ?? ? nonatomic :非原子性,允許同時(shí)使用setter 或getter方法,不安全但效率高,推薦使用nonatomic ???? 2.內(nèi)存管理組
????assign 默認(rèn)值? 基本數(shù)據(jù)類型使用assign修飾,代理屬性使用assign修飾
???? retain 對象類型一般使用retain
????copy? 字符串一般用copy修飾,如果要使用copy修飾屬性,這個(gè)屬性必須遵循NSCoping協(xié)議 ???? 3.讀寫控制組
???? readWrite : 可讀可寫,自動(dòng)幫你生成setter 和getter 方法 ?默認(rèn)值
???? readOnly? :只讀,系統(tǒng)只幫你生成getter方法 ???? 4.重命名組 ???? setter = setter新名字 ???? getter = getter 新名字 (除了BOOL特殊情況,其他的一般不使用這種方法) 例子1定義一個(gè)Boy的類;實(shí)例變量 name age gender ? ? 自定義初始化方法 ? ? 遍歷構(gòu)造器方法 ? ? 重寫description 方法
Boy.h @interface Boy : NSObject //屬性修飾符寫在@propety后面的()小括號中
//屬性修飾符可以寫多個(gè),每一個(gè)修飾符之間用逗號隔開
//系統(tǒng)默認(rèn)readwrite? ,平時(shí)可以不寫

@property (nonatomic,copy,readwrite,setter=setAAA:,getter=AAA)NSString *name;
@property (atomic,copy,readwrite)NSString *gender;
@property (nonatomic,assign,readonly)NSInteger? age; //蘋果的習(xí)慣,如果一個(gè)屬性是Bool類型的,會(huì)對getter方法重命名 @property (nonatomic,assign,readwrite,getter=isFalg)BOOL flag; @end
Boy.m ?使用屬性可以不寫實(shí)現(xiàn)部分
main.m //建一個(gè)Boy對象
???
Boy *boy = [Boy boyWithName:@"zhangsan" gender:@"yao" age:18];
???NSLog(@"%@",boy); // readOnly? 只讀不能寫
//??? boy.age = 18; ?error!!
???NSLog(@"%ld",boy.age); ??? //name屬性的setter和getter方法起了別名
??? [boy
setAAA:@"Lisi"];
???
NSLog(@"%@",[boy AAA]);
??? boy.
name = @"Wanger";
???
NSLog(@"%@",boy.AAA);
??? boy.
name = @"Mazi";
???NSLog(@"%@",boy.name); 例子2: 定義一個(gè)Girl類,實(shí)例變量 name,sex,age,height,寫屬性的屬性,自定義初始化方法,便利構(gòu)造器方法,重寫description方法
Girl.h @interface Girl : NSObject
@property (nonatomic,copy)NSString *name;
@property(nonatomic,copy) NSString *sex;
@property (nonatomic,assign)NSInteger age;
@property (nonatomic,assign)CGFloat height;
//- (void)sayHi; error!!!
- (
id)initWithGirlFriend : (NSString *)name sex : (NSString *)sex age : (NSInteger)age height : (CGFloat)height;
+ (
id)girlWithGirlFriend : (NSString *)name sex : (NSString *)sex age : (NSInteger)age height : (CGFloat)height;
@end
Girl.m @implementation Girl
//當(dāng)屬性生成的setter和getter方法的實(shí)現(xiàn),不滿足你的需求時(shí),可以重寫setter和getter方法
//當(dāng)完全重寫setter和getter方法時(shí),@synthesize name= _name;,就是實(shí)效的 ? ? ? ?解決問題的方法 ? ? ?1.只重寫setter和getter 方法中的一個(gè) ? ?? 2.自己添加@synthesize name= _name; @synthesize name= _name;
- (
void)setName:(NSString *)name
{
???
NSLog(@"你好小姐");
//??? _name = name;
//???self.name = name;? //self.name == [self setNane : name];
???
//??????????? NSLog(@"%@",self.name); ????? //self.name == [self name];
???????????
_name = name;
} - (NSString *)name{
//??? return self.name;? error!!! ? [self name]; ? ? ?(2)ERROR!!! ?
???
return _name;
}
++++++方法內(nèi)部是不能用方法調(diào)用自己++++++
//- (void)sayHi{
//??? NSLog(@"小倉");
//??? [self sayHi];
//} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ( 3) ERROR!!! //初始化和遍歷構(gòu)造器方法 - (id)initWithGirlFriend : (NSString *)name sex : (NSString *)sex age : (NSInteger)age height : (CGFloat)height{
???
if (self = [super init]) {
???????
_name = name;
???????
_sex = sex;
???????
_age= age;
???????
_height = height;
??? }
???
return self;
}
+ (
id)girlWithGirlFriend : (NSString *)name sex : (NSString *)sex age : (NSInteger)age height : (CGFloat)height{
???
return [[Girl alloc]initWithGirlFriend:name sex:sex age:age height:height];
} //description方法 - (NSString *)description
{
???
return [NSString stringWithFormat:@"%@-%@-%ld-%.2lf", _name,_sex,_age,_height];
} -------------------------------------------------------------------- //第3知識(shí)點(diǎn)KVC? Key-Value-Coding 鍵值編碼 ?例題中的調(diào)用部分 - (void)setValue:(id)value forUndefinedKey:(NSString *)key{
???
NSLog(@"沒有在Girl類中找到此key值");
}
- (
id)valueForUndefinedKey:(NSString *)key{
???
return nil;
} @end
main.m Girl *g = [Girl girlWithGirlFriend:@"如花" sex:@"yao" age:28 height:175.6]; ???NSLog(@"%@",g); ??? g.name = @"翠花"; ???NSLog(@"%@",g.name); ==================================================== 3、 KVC? Key-Value-Coding 鍵值編碼 通過KVC訪問實(shí)例變量,是一種間接訪問實(shí)例變量的形式 例子: Man.h @class Girl;
@interface Man : NSObject
{
???
NSString *_name;
}
@property(nonatomic,retain)Girl *girlFriend;
//@property (nonatomic,copy)NSString *name; //做例子實(shí)例變量
@property (nonatomic,assign)NSInteger age;

- (
id)initWithName : (Girl *)girlFriend name : (NSString *)name? age : (NSInteger)age;

+ (
id)manWithName : (Girl *)girlFriend? name : (NSString *)name? age : (NSInteger)age;
@end
Man.m #import "Man.h"
#import
"Girl.h"
@implementation Man //實(shí)現(xiàn)初始化方法 - (id)initWithName : (Girl *)girlFriend? name : (NSString *)name? age : (NSInteger)age{
???
if (self = [super init]) {
???????
_girlFriend = girlFriend;
???????
_age = age;
???????
_name = name;
??? }
???
return self;
} //實(shí)現(xiàn)遍歷構(gòu)造器方法 + (id)manWithName : (Girl *)girlFriend name : (NSString *)name? age : (NSInteger)age{
???
return [[Man alloc]initWithName:girlFriend name:name age:age];
}
- (
NSString *)description
{
???
return [NSString stringWithFormat:@"%@-%@-%ld", _girlFriend,_name,_age];
} ------------------------------------------------ //防止沒有找到對應(yīng)的key值而引起的Crash - (void)setValue:(id)value forUndefinedKey:(NSString *)key ?//容易打錯(cuò) {
???
NSLog(@"哈哈,沒有找到對應(yīng)key值");
}
//防止沒有找到對應(yīng)的key值而引起的Crash - (id)valueForUndefinedKey:(NSString *)key{
???
return nil;
}
@end
main.m //通過key值去類中查找實(shí)例變量,先判斷有沒有實(shí)例變量name,若沒有就賦值,如果沒有接著判斷有沒有_name,如果有酒賦值 ? ??Man *man = [[Man alloc]init]; ? ? [man setValue:@"妖" forKey:@"name"]; ??? NSLog(@"%@",[man valueForKey:@"name"]);
??? [man
setValue:g forKey:@"girlFriend"];
???NSLog(@"%@",[man valueForKey:@"girlFriend"]);
? //想通過man這個(gè)對象給girl 這對象的名字賦值@"棉花" ? [[man valueForKey:@"girlFriend"] setValue:@"棉花" forKey:@"name"];
???
//通過KVC把棉花打印出來
???
NSLog(@"%@",[[man valueForKey:@"girlFriend"]valueForKey:@"name"]);
???
???
//KVC通過路徑賦值取值(即使沒有是實(shí)現(xiàn)setter 和 getter 方法也可以通過KVC賦值和取值)
??? [man
setValue:@"棉花糖" forKeyPath:@"girlFriend.name"];
????
NSLog(@"%@",[[man valueForKey:@"girlFriend"]valueForKey:@"name"]);
???NSLog(@"%@",[man valueForKeyPath:@"girlFriend.name"]); 總結(jié):注意前三個(gè)例題中的ERROR!!!錯(cuò)誤造成Crash!原因是造成遞歸顯現(xiàn)!
? ? ? ? ? ? ? ? ?歡迎分享本文,未經(jīng)許可,不得轉(zhuǎn)載,轉(zhuǎn)載請注明出處!

總結(jié)

以上是生活随笔為你收集整理的Property属性,amp;nbsp;KVC键值编码OC…的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 特级毛片爽www免费版 | 爆乳2把你榨干哦ova在线观看 | 日韩一区二区三区三四区视频在线观看 | 伊人精品一区二区三区 | 亚洲国产黄色 | 一区二区三区视频在线播放 | 原创露脸88av | 国模私拍大尺度裸体av | 天天爱夜夜爱 | 亚洲精品久久久中文字幕 | gai视频在线观看资源 | 欧美a在线观看 | 驯服少爷漫画免费观看下拉式漫画 | 久久精品免费观看 | 一个人看的www日本高清视频 | 日韩av福利 | 无码内射中文字幕岛国片 | 精品国产一区二区三区四区 | a在线观看视频 | 国产一区二区三区成人 | av不卡在线播放 | 蜜桃av一区二区三区 | www.国产免费 | 精品一区二区视频 | 成人午夜性视频 | 青草青视频 | 国产免费视屏 | 午夜精品久久久久久久96蜜桃 | 朝桐光av在线一区二区三区 | 40一50一60老女人毛片 | 国产婷 | 日韩欧美电影一区二区三区 | 99在线免费 | 视频一二区 | 91成人国产| 中文字幕av网 | 日韩成人无码 | 高清乱码免费网 | 超碰cc| 91蝌蚪视频在线 | 国产尤物| 日韩国产欧美精品 | 懂色aⅴ国产一区二区三区 亚洲欧美国产另类 | 香蕉国产精品视频 | 女性私密整形视频 | 欧美狠狠爱 | 91久久免费 | 国产日韩一区 | 欧美操操操| 亚洲www视频 | 第一章豪妇荡乳黄淑珍 | 窝窝视频在线观看 | 美女扒开尿口让男人桶 | 人妻换人妻仑乱 | 亚洲av无码专区在线播放中文 | 国产一二三区精品 | 成年人在线播放视频 | 中国丰满人妻videoshd | 日韩午夜| 色综合av在线 | 久久99精品久久久久久噜噜 | 琪琪av在线| 国产无套粉嫩白浆内谢 | 日韩精品视频久久 | 国产黄视频在线观看 | 免费看亚洲 | 亚洲性天堂 | 丁香一区二区三区 | 久久久久久中文字幕 | 国产破处av | 在线看91 | 999热视频| 国产情侣自拍一区 | 久久久久久国产视频 | 日日做夜夜爽毛片麻豆 | 欧美亚洲一级片 | 欧美草草 | 6080电视影片在线观看 | 成人免费黄色片 | 国产麻豆成人传媒免费观看 | 麻豆传媒视频入口 | 伊人网视频在线观看 | 户外露出一区二区三区 | 黄色一机片 | 色四月婷婷 | 色综合久久久久久 | 国产欧美一区二区三区在线老狼 | 爱看av在线 | 国产乱码精品一品二品 | 日av一区 | 国产剧情av引诱维修工 | 奇米影视777四色 | 噜啪啪 | www欧美视频| 亚洲片在线观看 | chien国产乱露脸对白 | 中文字幕第一页av | 亚洲欧美偷拍一区 | 欧美成年人视频在线观看 |