【发布时间】:2012-04-26 02:30:02
【问题描述】:
我想要一个 Class 类型的 ivar,并在传入后保留指针。但无论我做什么,arc 都不会让我这样做。例如,如果我声明
@property (nonatomic, strong) Class myClass;
编译器决定 myClass 应该是 unsafe_unretained。如果我试试这个:
-(id) initWithClass: (Class) passedInClass {
if ((self = [super init])) {
self.myClass = passedInClass;
}
return self;
}
发生的情况是,即使该类在调用代码中为非 nil,在 init 方法中也是 nil。
关掉电弧短,有什么办法可以解决这个问题吗?
编辑:这个问题是错误的。它确实有效。查看接受的答案。
【问题讨论】:
-
类与 ARC 不兼容。一些 objc 对象具有自定义内存管理(即它们覆盖保留释放和释放),因此不能与 ARC 一起使用。我不知道任何地方是否有它们的列表,但我很确定 Class 是其中之一。我不知道任何解决方案,所以我不会将此作为答案发布。
-
@borrrden ARC 处理类指针。 clang Automatic Reference Counting, section 3 “Retainable object pointers”:“可保留对象指针类型共有三种:……Objective-C 对象指针(id、Class、NSFoo* 等)……”
-
@robmayoff 那怎么样...我的立场是正确的>_
标签: objective-c ios automatic-ref-counting