UITextView setEnabled:导致保留计数增加?

Posted

技术标签:

【中文标题】UITextView setEnabled:导致保留计数增加?【英文标题】:UITextView setEnabled: causes the retain count to increment? 【发布时间】:2011-03-30 16:43:17 【问题描述】:

我有一个 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
  

现在,我已经“自动释放”了文本视图,但我不确定内存是否管理得当(帖子与此 question 有关)。

【问题讨论】:

保留计数通常具有误导性,您不必担心它们。在您的代码 sn-p 中,可能发生的事情是某些内部组件正在调用 [[myText retain] autorelease] 或类似的东西作为其工作的一部分。 【参考方案1】:

可能吗?绝对的。

你在乎吗?一点也不。除非您在子类中覆盖了 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: 时,该方法是否保留对象或复制它是与此范围内的内存管理无关的实现细节。显然,子视图维护一个引用并保留它对于目的是必要的,但这是超出此方法内存管理范围的实现细节!

【讨论】:

以上是关于UITextView setEnabled:导致保留计数增加?的主要内容,如果未能解决你的问题,请参考以下文章

向上滚动时动态设置 UITextView 排除路径会导致无限循环

iOS:解决UITextView自适应高度粘贴大量文字导致显示不全的问题

带有 UITextView 的 UITableViewCells 导致 DDTokenCacheMoveStreamOffset 发生错误偏移

具有边缘到边缘排除路径的 UiTextView 导致所有文本消失

为 UITextView 设置文本会导致重置为默认字体和颜色问题

长按后选择复制图像时,swift uitextview html图像会导致崩溃