2011-06-10 61 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