我正试图像这样启动我的ivar:
在h-file
中声明如下@interface MyClass: {
UITextView *_myTextView;
}
然后在m文件中创建
- (id)init {
self = [super init];
if(self) {
[self initTextView:_myTextView];
}
return self;
}
- (void)initTextView:(UITextView *)textView {
textView = [[UITextView alloc] init];
...
}
之后_myTextView仍然是零。 为什么这样做以及我该怎么做才能使它工作?我已经启用了ARC。
[编辑]
这很有效。谢谢大家!
- (id)init {
self = [super init];
if (self) {
_textView1 = [self createTextView];
_textView2 = [self createTextView];
_textView3 = [self createTextView];
}
return self;
}
- (UITextView *)createTextView {
UITextView *textView = [[UITextView alloc] init];
...
return textView;
}
答案 0 :(得分:3)
您需要始终使用以下方式引用实例变量:
self.textView = [[UITextView alloc] init];
同样使用initTextView
以外的名称作为以init
开头的方法在Objective-C中具有特殊含义。
如果要使用相同的代码初始化多个文本视图控件,请使用以下代码:
- (UITextView *)createTextView
{
UITextView *textView = [[UITextView alloc] init];
textView.something = whatever;
...
return textView;
}
然后像这样使用它:
- (id)init {
self = [super init];
if(self)
{
self.textView1 = [self createTextView];
self.textView2 = [self createTextView];
...
self.textViewN = [self createTextView];
}
}
答案 1 :(得分:1)
- (id)init {
self = [super init];
if(self) {
[self initTextView];
}
}
- (void)initTextView{
_myTextView = [[UITextView alloc] init];
...
}
如果你想为几个文本视图调用initTextView,你可以这样编码:
- (id)init {
self = [super init];
if(self) {
_myTextView = [[UITextView alloc] init];
[self initTextView:_myTextView];
}
}
- (void)initTextView:(UITextView *)textView{
//setup the textView
...
}
答案 2 :(得分:1)
在[self initTextView:_myTextView];
中,您将_myTextView的当前值(即nil)传递给initTextView:
方法。要设置实例变量,需要指向指针的指针。
- (id)init {
self = [super init];
if (self) {
[self setupTextView:&_myTextView];
}
return self;
}
- (void)setupTextView:(UITextView * __strong *)textView {
*textView = [[UITextView alloc] init];
...
}
我还将initTextView:
方法重命名为setupTextView
,因为从init
开始的方法预计会像ARC中的其他init
方法一样。