4

我想要一个 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。

没有关闭电弧,有没有办法解决这个问题?

编辑:这个问题是错误的。它确实有效。请参阅已接受的答案。

4

1 回答 1

4

与针对 10.7 和 5.1 的 Xcode 4.3.2 广告一样工作:

@interface MOYNObject : NSObject
@property (nonatomic, strong, readwrite) Class myClass;
@end

@implementation MOYNObject
@synthesize myClass;

- (id)initWithClass:(id)pClass
{
    self = [super init];
    if (self != nil)
        self.myClass = pClass;
    assert(self.myClass);
    CFShow((__bridge const void*)self.myClass);
    return self;
}

@end

int main(int argc, const char* argv[]) {
    @autoreleasepool {
        MOYNObject * o = [[MOYNObject alloc] initWithClass:[NSString class]];
        // ...
    }
    return 0;
}

你领先还是落后于 4.3.2?

于 2012-04-26T04:18:23.397 回答