今天面試兩家公司,下午就得到了一個公司的答復(fù)绑洛,直接被拒救斑,心很痛,其實挺想去那家公司的真屯,無奈
今天面試的兩家公司都有了共同的問題:
1脸候、說說了解的KVC、KVO绑蔫;
2运沦、說說你常用的第三方庫,類似AFNetWorking配深,如何調(diào)用携添,怎么用;
3篓叶、在什么情況下會用到weak烈掠,為什么不能用strong
KVC (key value coding)
KVC 就是鍵值編碼(key-value-coding)。
KVC 的主要作用:
1缸托、修改私有成員變量 -》可以修改系統(tǒng)的類的成員變量
2左敌、賦值:
????2.1、keyPath包含了key的所有功能
????2.2俐镐、forKeyPath 進(jìn)行內(nèi)部的點語法,層層訪問內(nèi)部的屬性
? ? 2.3矫限、注意: key值一定要在屬性中找到 (對應(yīng)屬性值)
3、kvc可以自動類型轉(zhuǎn)換 -》網(wǎng)絡(luò)請求數(shù)據(jù)時候有幫助
4、kvc可以字典轉(zhuǎn)模型叼风,用上
- (instancetype)initWithDict:(NSDictionary*)dict{
? ? if(self= [super init]) {
? ? ? ? [self setValuesForKeysWithDictionary:dict];
? ? }
?return self;?}
- (NSString*)description{
? ? return [NSString stringWithFormat:@"屬性1:%@----屬性2:%.2f", _屬性1, _屬性2];
}
?[self setValuesForKeysWithDictionary:dict];
但是P页狻!咬扇!開發(fā)中是不建議使用setValuesForKeysWithDictionary:
?1、 字典中的key必須在模型的屬性中找到
?2廊勃、 如果模型中帶有模型,setValuesForKeysWithDictionary不好使
所以懈贺,這個?setValuesForKeysWithDictionary的應(yīng)用在是簡單的字典轉(zhuǎn)模型 ---> 框架 (MJExtention) 復(fù)雜一定的字典一樣轉(zhuǎn)不了模型,一樣轉(zhuǎn)出來都是字典坡垫;
//字典轉(zhuǎn)模型梭灿,使用的是mj_objectWithKeyValues:方法User *user = [Usermj_objectWithKeyValues:dict];
// JSON字符串轉(zhuǎn)模型User *user = [User mj_objectWithKeyValues:jsonString];
復(fù)雜的字典 --> 模型 (模型里面包含了模型)
模型類Status定義:
@interfaceStatus:NSObject@property(copy,nonatomic)NSString*text;@property(strong,nonatomic) User *user;/* 其他模型類型 */@property(strong,nonatomic) Status *retweetedStatus;/* 自我模型類型 */@end
使用實例:
NSDictionary*dict = @{@"text":@"Agree!Nice weather!",@"user": @{@"name":@"Jack",@"icon":@"lufy.png"},@"retweetedStatus": @{@"text":@"Nice weather!",@"user": @{@"name":@"Rose",@"icon":@"nami.png"}? ? }};
//字典轉(zhuǎn)模型,模型里面含有模型Status *status = [Status mj_objectWithKeyValues:dict];
NSString*text = status.text;
NSString*name = status.user.name;
NSString*icon = status.user.icon;
NSLog(@"text=%@, name=%@, icon=%@", text, name, icon);
// text=Agree!Nice weather!, name=Jack, icon=lufy.pngNSString*text2 = status.retweetedStatus.text;
NSString*name2 = status.retweetedStatus.user.name;
NSString*icon2 = status.retweetedStatus.user.icon;
NSLog(@"text2=%@, name2=%@, icon2=%@", text2, name2, icon2);
5冰悠、取值方法
?NSLog(@"%@ --- %.2f", [類名 valueForKeyPath:@"屬性"], [[類名 valueForKey:@"屬性"] floatValue]);
6堡妒、模型轉(zhuǎn)字典 - 》往服務(wù)器上傳數(shù)據(jù)
person.name=@"lurry";
person.money=21.21;
NSDictionary *dict = [person dictionaryWithValuesForKeys:@[@"name", @"money"]];
7、取出數(shù)組中所有模型中的某個屬性
?NSArray*allPersons =@[person1, person2, person3];
?NSArray*allPersonName = [allPersons valueForKeyPath:@"name"];
KVO-Key Value Observing (鍵值監(jiān)聽)--->當(dāng)某個對象的屬性值發(fā)生改變的時候(用KVO監(jiān)聽)
?作用:給對象綁定一個監(jiān)聽器(觀察者)
?? ? - Observer 觀察者
?? ? - KeyPath 要監(jiān)聽的屬性
?? ? - options 選項(方法方法中拿到屬性值)
?? ? */
[類 addObserver:self forKeyPath:@"屬性" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
[類 removeObserver:self forKeyPath:@"name"];
//移除