我对Objective-c非常陌生,我正在努力解决这个问题一段时间!这是我的班级原型:
@interface YoCatchModel : NSObject
/**
Name of the Yo user. Currently this is local
*/
@property (nonatomic, strong) NSString* username;
/**
History of the messages sent with Yo
*/
@property (nonatomic, strong, readonly) NSMutableArray* historyArray;
/*
implement init method
*/
+ (instancetype) initmethod;
我应该在这个只读的方法中为我的历史可变数组分配内存。
我想创建另一个带有用户名字符串参数的init方法。这个新的initWithUsername方法应该在其定义中调用init。
这是我尝试使用instancetype作为返回类型实现init方法的实现。但我不确定如何
为用户名调用另一个init方法。
@implementation YoCatchModel
+ (instancetype)initmethod {
return [[[self class] alloc] init];
}
我很感激,如果有人能给我一些提示如何做到这一点。到目前为止,我已阅读这些页面到达此处:
答案 0 :(得分:2)
initWithUsername
方法成为您班级的指定初始化程序,如下所示:
- (instancetype)initWithUsername:(NSString *)username
{
self = [super init];
if (self) {
_username = [username copy];
_historyArray = [NSMutableArray new];
}
return self;
}
您应该使用默认的init
方法使用指定的初始化程序:
- (instancetype)init
{
return [self initWithUsername:nil];
}
并注意此代码适用于以_
开头的属性支持实例变量,而不是使用self.
(无论如何都不能使用readonly
属性),这是为了避免属性设定方法可能产生的KVO副作用。