我正在学习财产,我阅读了各种文档,但仍然不清楚财产是如何工作的,并且遇到了让我感到困惑的场景。我创建了一个示例应用程序,其中我创建了一个属性,如下所示:
@property(nonatomic,retain)NSString *strValue;
并合成它:
@synthesize strValue;
1)第一个场景:
在 viewDidLoad 我写道:
strValue = [[NSString stringWithFormat:@"value"] retain];
在 dealloc 我写道:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
它运行良好,没有任何泄漏。我的问题是:创建保留属性 strValue(@property(nonatomic,retain)NSString *strValue;) 时保留的内存发生了什么?
2)第二种情况:
在 viewDidLoad 我写道:
self.strValue = [[NSString stringWithFormat:@"value"] retain];
在 dealloc 我写道:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
它在 self.strValue = [[NSString stringWithFormat:@"value"] retain] 行显示内存泄漏。这里的问题是:为什么在这里显示内存泄漏?这行是否不等于以下代码行:
[strValue release];
[strValue retain];
3)第三种情况:在 viewDidLoad 我写道:
self.strValue = [NSString stringWithFormat:@"value"];
在 dealloc 我写道:
NSLog(@"str value : %@",self.strValue);
[self.strValue release];
它工作得很好,没有任何内存泄漏或悬空引用,怎么样?谁能解释一下属性实际上是如何工作的?当我们使用属性时,内存是如何分配和释放的?