【发布时间】:2015-04-14 17:43:03
【问题描述】:
我有一个手动引用计数项目,其中很少有类通过删除保留、释放和设置编译器标志“-fobjc-arc”转换为 ARC 它们是 2 个启用 ARC(-fobjc-arc) 的视图控制器类,ClassA 和 ClassB。
我在for循环中在ClassA中分配和初始化ClassB的对象以实现一些功能,代码sn-p如下,
@interface ClassA ()
@property (strong, nonatomic) ClassB *classBObj;
@end
@implementation ClassA
- (void)createClassBView {
for (int count = 0; count <= [dataObject count]; count++) //if count is more than 1 it is not retaining the previous classBObj
{
classBObj = [[ClassB alloc] init]; //ARC is keeping only 1 object reference of this class but I need to retain all the iterated objects
[self.scrollView addSubView:classBObj withFrame:myFrame];//only 1 view is getting added as subview even if control comes here more than once
}
}
@end
以上代码在非 ARC(MRC) 中对我来说可以正常工作,但在启用 ARC 时无法正常工作。再强也不保留ClassB对象,
只有 1 个对象,即;最后一次迭代的 ClassB 对象引用是活动的,其余的正在被破坏并且它正在抛出异常“ClassB 引用到一个已释放的实例”
我尝试在循环内使用if(!classBObj){classBObj = [[ClassB alloc] init];},那时我没有获得对已释放实例异常的 ClassB 引用,但只有一个 ClassB 的子视图被添加到我的滚动视图中(即最后一次迭代)。
请指导我。 提前感谢任何帮助。
【问题讨论】:
-
您是否缺少
self和self.classBObj = ...?-addSubView:withFrame:方法的内部是什么?
标签: ios objective-c automatic-ref-counting