2011-11-25 50 views
7

我是新来的ARC,我有一个对象,它有一些内部类作为成员。在init方法中,我想为它们分配新的对象。为什么我不能分配/ init - 获取“将保留对象分配给不安全属性”警告?

ClassA.h

#import "ClassB.h" 
@interface ClassA : NSObject 
@property (assign) ClassB *member; 
@end 

ClassB.h

@interface ClassB : NSObject 
@property (assign) NSString *name; 
@end 

ClassA.m

@synthesize member = _member; 
-(id)init 
{ 
    _member = [[ClassB alloc] init]; 
} 

,但我得到的 “分配保留对象不安全的财产” 的错误。我在互联网上搜索,并没有看到有关此特定警告的其他信息。它编译,但得到一个运行时坏访问异常。

+3

请将.h文件与实例变量一起发布。您的代码不完整。 – futureelite7

+2

直到我将“at”属性(赋值)改为“at”属性(强,非原子) –

回答

12

眼前的问题是,你分配对象的成员标记weak,这意味着该对象不会有很强的借鉴意义,将被立即释放。使用strongretain而不是weakassign将解决该问题。

-init方法的一个较大的问题是它不会调用[super init],它不会返回任何内容。至少,您的-init应如下所示:

-(id)init 
{ 
    self = [super init]; 
    if (self != nil) { 
     self.member = [[ClassB alloc] init]; 
    } 
    return self; 
} 
+1

谢谢,我为了简洁而保留了[super init],但为了完整起见,你是正确的。感谢您的解释,我知道我为什么IBOutlets很弱,并且xib之外的成员对象需要很强大。 –

相关问题