dar*_*sky 7 iphone cocoa-touch objective-c ipad
我在Objective-C中创建了一个自定义对象.现在我想创建一个自定义初始化程序.该对象有两个属性,名称和分数.所以我的初始化程序如下:
- (id)initWithName:(NSString *)playerName {
if ((self = [super init])) {
self.name = [playerName retain];
self.score = [NSNumber numberWithInt:0];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我retain在这里使用得当吗?或者我可以做到这样self.name = playerName;吗?
此外,假设我想要另一个初始化程序,但保留initWithName:playerName指定的初始化程序.如何让第二个初始化程序调用第一个?
对于最后一个问题,我知道我也需要覆盖这个- (id)init方法.但是,我该怎么办?只是分配测试属性,init只有类被初始化?
谢谢!
我在这里使用保留吗?
不,你不是.你应该使用
self.name = playerName;
Run Code Online (Sandbox Code Playgroud)
正如你的建议,或(根据Apple推荐)
name = [playerName copy];
Run Code Online (Sandbox Code Playgroud)
建议不要使用访问器,-init因为子类可能会覆盖它们.
另请注意,作为NSString实现,NSCopying您应该使用copy属性,而不是retain属性.
此外,假设我想要另一个初始化器,但保持initWithName:playerName为指定的初始化器.如何让第二个初始化程序调用第一个?
使用-init作为示例(因为如果指定的初始化程序不相同,则必须覆盖超类的指定初始化程序)
-(id) init
{
return [self initWithName: @"Some default value"];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6636 次 |
| 最近记录: |