Iphone UITextView setEnabled:是否导致保留计数增加?
我有一个UITextView,它的文本集来自一个局部变量。在此之后是否可能:Iphone UITextView setEnabled:是否导致保留计数增加?,iphone,objective-c,cocoa-touch,ios4,retaincount,Iphone,Objective C,Cocoa Touch,Ios4,Retaincount,我有一个UITextView,它的文本集来自一个局部变量。在此之后是否可能: [textView setEnabled:NO]; 保留计数增加1 编辑: “问题”,如果是问题,则在小视图的构造函数中: - (id)initWithData:(NSMutableArray *) { UITextView *myText; if ( ( self = [super init] ) ) { myText = [[UITextView alloc] initWithFrame:aRec
[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
}
}
现在,我已经“自动删除”了文本视图,但我不确定内存是否管理良好(帖子与此相关)。可能吗?当然
你在乎吗?一点也不。除非您在子类中重写了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
局部变量范围的末尾,所有保留已通过发布进行平衡
当您添加子视图:
时,该方法是保留对象还是复制对象是一个实现细节,与此范围内的内存管理无关。显然,子视图维护一个引用并保留它是出于其目的所必需的,但这是一个超出此方法内存管理范围的实现细节 可能吗?当然
你在乎吗?一点也不。除非您在子类中重写了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
局部变量范围的末尾,所有保留已通过发布进行平衡
当您
添加子视图:
时,该方法是保留对象还是复制对象是一个实现细节,与此范围内的内存管理无关。显然,子视图维护一个引用并保留它是出于其目的所必需的,但这是一个超出此方法内存管理范围的实现细节 通常,保留计数是误导性的,你不应该担心它们。在您的代码片段中,可能发生的情况是某些内部组件正在调用[[myText retain]autorelease]
或类似的操作作为其工作的一部分。通常,retain计数具有误导性,您不必担心它们。在您的代码片段中,可能发生的情况是,某些内部组件正在调用[[myText retain]autorelease]
或类似的东西作为其工作的一部分。