2011-06-10 58 views
2

什麼是它們之間的區別?:保留差異之間保持

@property (nonatomic, retain) NSString *A_StringToRetain; 

NSString *B_StringToRetain; 
B_StringToRetain = [[MyClass GetStringValue] retain]; 

因爲使用屬性,字符串將不保留和使用第二種方式,一切OK,但我需要檢查並釋放以避免泄漏。



我在.h

NSString *A_StringToRetain; 
@property (nonatomic, retain) NSString *A_StringToRetain; 

宣佈.m我使用

A_StringToRetain = @"MyValue"; 

但是當我從方法退出,我失去A_StringToRetain。這是一個殭屍。

如果我不使用屬性,並以字符串在內存這樣

NSString *B_StringToRetain; 
B_StringToRetain = [[MyClass GetStringValue] retain]; 

聲明的字符串。


有人告訴我爲什麼請嗎?
這是不一樣的方式來分配/保留?
有什麼區別?

謝謝。

回答

1

您直接設置變量,並通過屬性不會(適用一個保留)......你要麼需要...

self.A_StringToRetain = someString; 

[self setA_StringToRetain:someString]; 

這裏的關鍵是self.這意味着你去財產,而不是直接向伊娃自己。

+0

太棒了!我很愚蠢! :)現在很明顯,顯然有效!謝謝。 – elp 2011-06-10 10:37:05