2012-05-14 40 views
1

它輕描淡寫地here該實例變量已經__strong每默認啓用 - 這是否意味着有這樣的:ARC:伊娃分配是否受財產屬性影響?

@interface Foo { 
    Bar *test; // implicitly __strong 
} 
@property (nonatomic, unsafe_unretained) Bar *test; 
@end 

,並呼籲

test = [[Bar alloc] init]; 
在實現文件

,新Bar實例將被保留?如果是的話,考慮到該財產告訴ARC不要觸摸它,Foo被釋放時,是否會釋放Bar實例?

回答

2

你試過編譯它嗎?它不會工作。與財產相關的伊娃必須擁有與財產相同的所有權限定詞。這是在Clang ARC doc

如果關聯的實例變量已經存在,那麼它的所有權限定必須等於該屬性的所有權;否則,該實例變量是使用該所有權限制創建的。

@interface Digby : NSObject 
{ 
    NSString * wiska; 
} 

@property (unsafe_unretained) NSString * wiska; 

@end 

@implementation Digby 

@synthesize wiska; // Existing ivar 'wiska' for property 'wiska' with unsafe_unretained attribute must be __unsafe_unretained 

@end 

如果刪除了明確的伊娃聲明,然後將合成的伊娃將__unsafe_unretained,像財產。

+0

你是對的,我在嘗試這個時犯了一個錯誤 - 我現在確實得到了一個錯誤。謝謝! – manmal

相關問題