setValue: forKey: 和 setValue: forKeyPath:

一. 先说下setObject forKey 和 setValue forKey

1.setObject:ForKey:NSMutableDictionary特有的;setValue:ForKey:KVC的主要方法;
2.setObject:ForKey:object对象不能为nil,不然会报错;key的参数只要是对象就可以,并局限于 NSString;                                                                           setValue:ForKey:Value值可以为nil,此时会自动调用removeObject:forKey:方法;key 的参数只能是NSString类型;
3.nilnull是不同的,[NSNull null]表示是一个空的对象,并不是nil;
4.setValue:ForKey:是在NSObject对象中创建的,即所有的对象都有这个方法,可以用于任何类(方法调用者是对象的时候);

二:objectForKey:valueForKey:取值区别与联系

NSDictioary取值的时候有两个方法,objectForKey:valueForKey:(建议用objectForKey:)
1.若key值不是以@符合开头, 两者是相同的;
2.若key值是以@开头, 例如:@“@key”,valueForKey:会去掉@,然后用剩下的部分执行[super valueForKey];
3.例子:

Person *person = [Person alloc] init]; person.name = @"Leo;

则通过:[person valueForKey:@“name”];取出的值是Leo。这是KVC的方法。

4.valueForKey:取值是找和指定key同名的property accessor(属性访问)没有找到的时候执行valueForUndefinedKey:方法,而valueForUndefinedKey:方法默认是抛出crash异常;

两者都是键值对应,区别是valueforkey 只允许使用NSString类型,objectforkey可以是任意类型.

三:valueForKeyPath 非常的强大

(1)执行方法NSArray *array = @[@"name", @"w", @"aa", @"jimsa"];
NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]);
输出
(NAME,W,AA,JIMSA)
相当于数组中的每个成员执行了`uppercaseString`
方法,然后把返回的对象组成一个新数组返回。既然可以用`uppercaseString`(2)执行数学算法(2.1)对NSNumber数组快速计算数组求和、平均数、最大值、最小值
NSArray *array = @[@1, @2, @3, @4, @10];
NSNumber *sum = [array valueForKeyPath:@"@sum.self"];
NSNumber *avg = [array valueForKeyPath:@"@avg.self"];
NSNumber *max = [array valueForKeyPath:@"@max.self"];
NSNumber *min = [array valueForKeyPath:@"@min.self"];(2.2)指定输出类型 NSNumber *sum = [array valueForKeyPath:@"@sum.floatValue"]; 

(2.3)剔除重复数据

NSArray *array = @[@"name", @"w", @"aa", @"jimsa", @"aa"];

NSLog(@"%@", [array valueForKeyPath:@"@distinctUnionOfObjects.self"]);

(4)直接改变对象隐藏属性的值

改变UITextfiedlplaceholder的颜色[searchField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];
 
 
时间: 2024-09-29 00:52:55

setValue: forKey: 和 setValue: forKeyPath:的相关文章

setObject:forKey:与setValue:forKey:的区别

首先不可变字典可以调起setValue:forKey:,但不能真正的进行操作,这取决与不可变字典不可增删改的特性. 然后看一下setObject:forKey: . setValue:forKey: . setValue:forKeyPath: 的标准调用语句: [muDict setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];[muDict setValue:<#(nullable id)#> fo

iOS.KVC.setValue:forKey:

Foundation Framework 定义了 NSObject(NSKeyValueCoding), - (void)setValue:(id)value forKey:(NSString *)key; 该接口的说明 1. 先在message receiver的class中搜索方法 -set<Key>: 2. 如果1中未找到,则在class中以此搜索 _<key>, _is<key>, <key>, is<Key> 实例变量 3. 如果2中未

setValue:forKey:和 setObjectforKey: 区别

1 setValue: forKey:的定义 @interface NSMutableDictionary(NSKeyValueCoding)/* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObject:forKey:.*/- (void)setValue:(id)value forKey:(NSString *)key;@endvalue 为 nil ,

setValue:forKey:和setObject:forKey:调用者是dictionary时的区别

通常使用NSMutableDictionary时经常会使用setValue:forKey:和setObject:forKey:他们一般情况下是可以交互使用的,但是他们在特定情况下是有区别的: 官方文档中有如下注释: /* Send -setObject:forKey: to the receiver, unless the value is nil, in which case send -removeObjectForKey:. */ - (void)setValue:(nullable Ob

Objective-c setObject:forKey:和setValue:forKey:的区别

setObject:forKey: 是NSMutableDictionary类的方法 key参数类型可以是任意类型对象 value不能为nil,不然会报错 setValue:forKey: 是NSObject类的方法也就是说所有的OC对象都有这个方法 key值必须是字符串 value可以为nil,但是当value为空时,会自动调用removeObject:forKey方法 1.注意:setObject:forKey:对象不能存放nil要与下面的这种情况区分: [imageDictionaryse

setObject:forKey和setValue:forKey的区别

setObject:forKey: 是NSMutableDictionary类的方法                              key参数类型可以是任意类型对象                              value不能为nil,不然会报错 setValue:forKey: 是NSObject类的方法也就是说所有的OC对象都有这个方法                            key值必须是字符串                            v

IOS setValue forKey

NSObjiect *obj:[obj setValue:value forKey:@"cpname"]复制代码的时候都会出现这个异常this class is not key value coding-compliant for the key cpname; 原因:obj不包含属性cpname 可以考虑使用 NSMutaleDictionary(Mutable) 类型的变量保存

浅谈KAC

今天我研究了一下KVC,下面我将浅谈一下我对KVC的认识,可能认识不足,我会在后续学习生活中改正. 首先,看到KVC,我们会想这个知识点是干嘛的,其实我们了解一下,就会发现KVC(Key-Value-Coding),键值编码 KVC主要是用来间接访问实例变量(赋值)... 下面我们看一下苹果给的KVC的官方文档: /* Given a value and a key that identifies an attribute, set the value of the attribute. Giv

KVC 和 KVO 简单总结

KVC: key value coding,键值编码.是一种通过使用属性的名称(key)来间接访问对象属性的方法.这个方法可以不用通过 setter/getter 方法来访问对象的属性.该方法使用的实质是,是使用 valueForKey来代替 getter 方法, setValueForKey 来代替 setter 方法. KVC 常用的方法: - (id)ValueForKey:   通过 key 值读取对象的属性 -(id)setValue: forKey: 通过 key 的值来使用属性 -