2011-11-25 40 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之外的成員對象需要很強大。 –

相關問題