头文件TekubaNet.h
#import
@interface TekubaNet:NSObject
{
NSString *url;
}
@end
实现文件
#import"TekubaNet.h"
@implementation TekubaNet
@end
这个TekubaNet类很简单,只有一个url变量。这种情况我们是没有办法通过TekubaNet的类实例访问url的。
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
TekubaNet *tekubaNet=[[TekubaNet alloc] init];
[tekubaNet setValue:@"http://www.tekuba.net" forKey:@"url"];
NSString *url=[book valueForKey:@"url"];
NSLog(@"tekuba url= %@",url);
[pool release];
return 0;
}
下面我们对代码做一些补充:
#import
@interface Webmaster:NSObject
{
NSString *name;
}
@end
实现文件
#import"Webmaster.h"
@implementation Webmaster
@end
将Webmaster添加到TekubaNet类,如下:
#import
@interface TekubaNet:NSObject
{
Webmaster *webmaster;
NSString *url;
}
@end
TekubaNet的实现文件不变。
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
TekubaNet *tekubaNet=[[[TekubaNet alloc] init] autorelease];
[tekubaNet setValue:@"http://www.tekuba.net" forKey:@"url"];
NSString *url=[tekubaNet valueForKey:@"url"];
NSLog(@"tekuba url: %@",url);
Webmaster *webmaster=[[[Webmaster alloc] init] autorelease];
[webmaster setValue:@"特酷吧" forKey:@"name"];
[tekubaNet setValue:webmaster forKey:@"webmaster"];
NSString *name=[tekubaNet valueForKeyPath:@"webmaster.name"]; /*在IOS中这种方式叫path*/
NSLog(@"webmaster name: %@",name);
[pool release];
return 0;
}
另外需要注意,KVC还有一个重要的特点就是自动装箱拆箱功能:即KVC会根据字符串自动的转型成适当的数据类型,例如:
@interface TekubaNet:NSObject
{
Webmaster *webmaster;
NSString *url;
int runDay;
}
则我们还是可以通过之前的方式访问:
[tekubaNet setValue:@"365" forKey:@"runDay"];
NSLog(@"tekubaNet runTime is %@",[tekubaNet valueForKey:@"runDay"]);
虽然runDay是int型的,但我们一样可以通过%@打印。
来自特酷吧,本文地址:www.tekuba.net/program/294/