我用这样的自定义init方法创建了一个简单的UIViewController:
-(id)initWithGroupNumber:(NSString *)groupNumber {
if ((self = [super init]) == nil) {
return nil;
}
self.levelGroup = groupNumber;
return self; }
levelGroup是一个用.h文件写的属性
@property (nonatomic, retain) NSString *levelGroup;
当我以这种方式调用上述方法时:
LevelsViewController *lvc = [[LevelsViewController alloc]initWithGroupNumber:@"5"];
控制器已分配,但内部的所有属性都设置为nil。我不明白为什么。
答案 0 :(得分:2)
替换
self.levelGroup = [[NSString alloc]init];
与
self.levelGroup = groupNumber; // actually uses your init value.
答案 1 :(得分:2)
首先,当您处理类型为mutable的子类(例如NSMutableString
)的类时,请使用copy
。
所以,你的财产应该成为:
@property (nonatomic, copy) NSString *levelGroup;
然后,在UIViewController
内合成属性
@synthesize levelGroup;
并在init
中执行以下操作:
-(id)initWithGroupNumber:(NSString *)groupNumber {
if (self = [super init]) {
levelGroup = [groupNumber copy];
}
return self;
}
正如memory management guide所述,您不应在self.
内和init
内使用dealloc
。
使用您的媒体资源self.levelGroup
获取或设置值。
请记得以dealloc发布:
[levelGroup release];
希望它有所帮助。