我们可以为类对象使用setvalue和forkey属性吗?

时间:2011-07-22 09:52:00

标签: objective-c ios ios4

我有一个名为“Book”的类,源代码如下: -

Book.h

#import <"UIKit/UIKit.h>


@interface Book : NSObject {

    NSInteger bookID;
    NSString *title;    //Same name as the Entity Name.
    NSString *author;   //Same name as the Entity Name.
    NSString *summary;  //Same name as the Entity Name.

}

@property (nonatomic, readwrite) NSInteger bookID;

@property (nonatomic, retain) NSString *title;

@property (nonatomic, retain) NSString *author;

@property (nonatomic, retain) NSString *summary;

@end

Book.m

#import "Book.h"

@implementation Book

@synthesize title, author, summary, bookID;

-(void) dealloc {

    [summary release];
    [author release];
    [title release];
    [super dealloc];
}

@end

然后在另一个班级中我可以写: -

Book *aBook = [[Book alloc]init];
[aBook setValue:currentElementValue forKey:elementName];

如果是,那为什么?因为通常setvalue和forkey用于在NSMutableDictionary中存储数据..

1 个答案:

答案 0 :(得分:0)

基本上,键值编码旨在处理对象的属性。 Key-Value Coding Programming Guide以行开头,

  

键值编码是间接访问对象属性的机制,使用字符串来标识属性,而不是通过调用访问器方法或直接通过实例变量访问它们。实质上,键值编码定义了应用程序访问器方法实现的模式和方法签名。

setObject:forKey: removeObjectForKey:方法旨在与字典一起使用。您还可以使用 setValue:forKey:方法将值设置为字典。但是,您不能对类对象使用 setObject:forKey:方法。

另一个区别是 setObject:forKey:不接受 nil 作为值。相反,您应该使用 NSNull 作为值。但是 setValue:forKey:接受 nil 并从字典中删除密钥,从而节省了内存。

[如果我错了,请有人纠正我!]