作业帮 > 综合 > 作业

Objective-C2.0程序设计原书上的地址簿问题

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/13 21:39:49
Objective-C2.0程序设计原书上的地址簿问题
@interface AddressCard:NSObject
{
NSString *name;
NSString *email;
}
@property (copy,nonatomic) NSString *name,*email;
-(void) setName:(NSString *) theName andEmail:(NSString *) theEmail;
-(void) print;
@end
实现文件
@synthesize name,email;
-(void) setName:(NSString *) theName andEmail:(NSString *) theEmail
{
self.name = theName;
self.email = theEmail;
}
在没有加copy和nonatomic属性之前
-(void) setEmail:(NSString *)email
{
email=[[NSString alloc] initWithString:email];
}
-(void) setName:(NSString *)name
{
name=[[NSString alloc] initWithString:name];
}
name和email的属性想要先拥有自己对象,而在在没有加copy和nonatomic属性之后看到的却是上面的-(void) setName:(NSString *) theName andEmail:(NSString *) theEmail只是进行指针的赋值,这样的结果name和email拥有自己的对象吗?为什么书上会这么来使用?
Objective-C2.0程序设计原书上的地址簿问题
你好,很高兴能与你交流.
在 -(void) setName: (NSString *) theName andEmail: (NSString *) theEmail 函数中书上使用了
  self.name = theName;
  self.email = theEmail;
的代码,据我所知,self.name= theName这样的写法属于Objective-c的特性,它等于
[self setName:theName],也就是调用了自动生成的setter代码. 此外,copy指令是通知Xcode生成了调用复制构造函数的代码.写法如同name=[[NSString alloc] initWithString:name]这样,是一样的东西.所以书上这样用没什么问题.