
OC中的valueForKey和valueForKeyPath有什么区别
1个回答
2016-08-05 · 百度知道合伙人官方认证企业
兄弟连教育成立于2006年,11年来专注IT职业教育,是国内专业的IT技术培训学校。2016年成功挂牌新三板(股票代码:839467)市值过亿。开设专注程序员培训专注php、Java、UI、云计算、Python、HTML5、
向TA提问
关注

展开全部
objectforkey 是NSDictionary的方法,valueforkey 是KVC的方法, 两者都是键值对应,区别是valueforkey 只允许使用NSString类型,objectforkey可以是任意类型.
objectForKey: is an NSDictionary method. An NSDictionary is a collection class similar to an NSArray, except instead of using indexes, it uses keys to differentiate between items. A key is an arbitrary string you provide. No two objects can have the same key (just as no two objects in an NSArray can have the same index).
valueForKey: is a KVC method. It works with ANY class. "valueForKey" allows you to access an instance variable using a string. So for instance, if I have an Account class with an instance variable accountNumber, I can do the following:
NSNumber*anAccountNumber =[NSNumber numberWithInt:12345];
Account*newAccount =[[Account alloc] init];
[newAccount setAccountNumber:anAccountNUmber];
NSNumber*anotherAccountNumber =[newAccount accountNumber];
Using KVC, I can also do it like this:
NSNumber*anAccountNumber =[NSNumber numberWithInt:12345];
Account*newAccount =[[Account alloc] init];
[newAccount setValue:anAccountNumber forKey:@"accountNumber"];
NSNumber*anotherAccountNumber =[newAccount valueForKey:@"accountNumber"];
Those are equivalent sets of statements.
I know you're thinking: wow, but sarcastically. KVC doesn't look all that useful. In fact, it looks "wordy". But when you want to change things at runtime, you can do lots of cool things that are much more difficult in other languages (but this is beyond the scope of your question).
If you want to learn more about KVC, there are many tutorials if you Google especially at Scott Stevenson's blog.
Hope that helps.
objectForKey: accepts any object as a key, not just strings. The only requirement is that the key support the NSCopying protocol.
When you do valueForKey: you need to give it an NSString, whereas objectForKey: can take any NSObject subclass as a key. This is because for Key-Value Coding, the keys are always strings.
In fact, the documentation states that even when you give valueForKey: an NSString, it will invokeobjectForKey: anyway unless the string starts with an @, in which case it invokes [super valueForKey:], which may call valueForUndefinedKey: which may raise an exception.此段是说C字符串无效,必须是@开头的字符串
objectForKey: is an NSDictionary method. An NSDictionary is a collection class similar to an NSArray, except instead of using indexes, it uses keys to differentiate between items. A key is an arbitrary string you provide. No two objects can have the same key (just as no two objects in an NSArray can have the same index).
valueForKey: is a KVC method. It works with ANY class. "valueForKey" allows you to access an instance variable using a string. So for instance, if I have an Account class with an instance variable accountNumber, I can do the following:
NSNumber*anAccountNumber =[NSNumber numberWithInt:12345];
Account*newAccount =[[Account alloc] init];
[newAccount setAccountNumber:anAccountNUmber];
NSNumber*anotherAccountNumber =[newAccount accountNumber];
Using KVC, I can also do it like this:
NSNumber*anAccountNumber =[NSNumber numberWithInt:12345];
Account*newAccount =[[Account alloc] init];
[newAccount setValue:anAccountNumber forKey:@"accountNumber"];
NSNumber*anotherAccountNumber =[newAccount valueForKey:@"accountNumber"];
Those are equivalent sets of statements.
I know you're thinking: wow, but sarcastically. KVC doesn't look all that useful. In fact, it looks "wordy". But when you want to change things at runtime, you can do lots of cool things that are much more difficult in other languages (but this is beyond the scope of your question).
If you want to learn more about KVC, there are many tutorials if you Google especially at Scott Stevenson's blog.
Hope that helps.
objectForKey: accepts any object as a key, not just strings. The only requirement is that the key support the NSCopying protocol.
When you do valueForKey: you need to give it an NSString, whereas objectForKey: can take any NSObject subclass as a key. This is because for Key-Value Coding, the keys are always strings.
In fact, the documentation states that even when you give valueForKey: an NSString, it will invokeobjectForKey: anyway unless the string starts with an @, in which case it invokes [super valueForKey:], which may call valueForUndefinedKey: which may raise an exception.此段是说C字符串无效,必须是@开头的字符串
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询