2011-08-28 78 views
1

尋找關於Objective-C屬性在與實例變量「鏈接」時如何工作的一點說明。我的困惑,從如何可以通過@synthesize指示,例如設置爲一個實例變量的屬性梗...分配給屬性的變量是否遵循該屬性的行爲?

@synthesize someProp = _someIVar; 

現在,如果我someProp是都喜歡......

@property (retain,readonly) SomeClass* someProp 

。 ..將這個...

-(id)initWithAutoreleasedInstanceOfSomeClass:(SomeClass*)thingThatIsAutoreleased { 
    self = [super init]; 
    if(self) { 
     _someIVar = thingThatIsAutoreleased; 
    } 
    return self; 
} 

...導致thingThatIsAutoreleased被保留?

坦克!

回答

3

因爲它是隻讀的,所以你不會有setter,但是可以通過設置內部成員變量來設置值。如果你設置了內部變量,那麼你需要保留它。

_someIVar = [thingy retain]; 

請注意,您可以通過撥打KVC,並得到保留觸發

[self setValue:myValue forKey:@"someProp"]; 

因此,要回答你原來的問題,不,你不會得到自動保留/釋放,如果你直接設置iVar。如果您操縱iVar,則必須保留/釋放。

相關問題