Objective C arc -- keeping a reference to a Class
automatic-ref-counting, ios, objective-c
Solution
Works as advertised with Xcode 4.3.2 targeting 10.7 and 5.1:
@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;
}
Are you ahead of or behind 4.3.2?
Problem
I want to have an ivar of type Class, and to keep the pointer around after it is passed in. But no matter what I do, arc will not let me do that. For instance, if I declare ``` @property (nonatomic, strong) Class myClass; ``` the compiler decides that myClass should be unsafe_unretained. And if I try this: ``` -(id) initWithClass: (Class) passedInClass { if ((self = [super init])) { self.myClass = passedInClass; } return self; } ``` what happens is that even if the class is non-nil in the calling code, it is nil within the init method. Short of turning off arc, is there any way to get around this? EDIT: This question is just wrong. It does work. See the accepted answer.