我有一个UITextView,它的文本集来自局部变量。之后是否有可能:
[textView setEnabled:NO];
保留计数增加1?
修改
“问题”,如果是问题,则在一个小视图的构造函数中:
- (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
}
}
现在,我已“自动释放”文本视图,但我不确定内存管理是否妥善(帖子与此question相关)。
答案 0 :(得分:4)
可能?绝对
你关心吗?没有一点。除非您在子类中覆盖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:
时,该方法是保留对象还是复制它是一个与此范围内的内存管理无关的实现细节。显然,子视图维护一个引用并保留它是其目的所必需的,但这是超出此方法内存管理范围的实现细节!