0

我有一个 UITextView,它的文本集来自一个局部变量。在此之后是否有可能:

[textView setEnabled:NO];

保留计数加一?

编辑:

“问题”,如果是问题,在小视图的构造函数中:

- (id)initWithData:(NSMutableArray *) {
  UITextView *myText;
  if ( ( self = [super init] ) ) {
    myText = [[UITextView alloc] initWithFrame:aRect];
    // retain count = 1;
    [myText setEnabled:NO]; // retain count 2
    [self addSubview:myText]; // retain count 3
    [myText release];  // retain count 2
  }
}

现在,我已经“自动释放”了文本视图,但我不确定内存是否管理得当(这篇文章与这个问题有关)。

4

1 回答 1

3

可能的?绝对地。

你关心?一点也不。除非您在子类中覆盖setEnabled:并且您是retain拨打电话的人,否则不会。

如果是,它是框架中的一个实现细节。


将保留计数视为增量,而不是绝对数字。绝对值是没有意义的。因此:

- (id)initWithData:(NSMutableArray *) {
  UITextView *myText;
  if ( ( self = [super init] ) ) {
    myText = [[UITextView alloc] initWithFrame:aRect]; // rc +1
    [myText setEnabled:NO]; // rc change irrelevant
    [self addSubview:myText]; // rc change irrelevant
    [myText release];  // rc -1
  }
}

所以,是的,你已经正确地管理了内存;在myText局部变量范围的末尾,所有保留都已通过发布平衡。

当你addSubview:,该方法是否保留对象或复制它是一个与此范围内的内存管理无关的实现细节。显然,子视图维护一个引用并为其目的保留它是必要的,但这是超出此方法内存管理范围的实现细节!

于 2011-03-30T17:28:25.153 回答