【问题标题】:KVC release objs using valueForKeyPath?KVC 使用 valueForKeyPath 发布 objs?
【发布时间】:2012-12-14 14:31:21
【问题描述】:

我有很多名为 _Obj_1_Obj_2 等的对象...
我想释放所有。

我正在使用 KVC。特别是要释放所有,我使用:

MyClass *obj = nil;
for ( int i=1 ; i<=14; i++ ) {
  obj = [self valueForKeyPath:[NSString stringWithFormat:@"_Obj_%d", i]];
  [obj release];
}

clang 分析器告诉我[obj release];

不正确的对象的引用计数递减不正确 此时归调用者所有?

我该如何解决?

这不是 ARC 项目。

【问题讨论】:

  • 你为什么要用它来释放那个可怜的对象?这确实是一种骇人听闻的反模式。
  • 好的,谢谢。现在,通过 cmets/response/negative vote 我知道这是用 kvc 释放 obj 的愚蠢方式。谢谢。

标签: iphone objective-c ios key-value-coding kvc


【解决方案1】:

这很容易解决

如果您不拥有该对象(您没有调用 retain),请不要释放它!

不要使用大量同名变量,而是使用数组来保存对象。那么释放就只是一个数组的释放。

【讨论】:

  • 同意。 Clang 的警告在这里是正确的。这是valueForKeyPath: 的非常危险的用法。
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 2013-08-16
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多