ari*_*rio 2 memory-management objective-c retain
在我的上一个问题(这里),我有一个问题,我得到一个EXC_BAD_ACCESS,因为我发布了我刚刚分配的变量:
NSMutableArray* s = [[NSMutableArray alloc] init];
stack = s;
[s release];
Run Code Online (Sandbox Code Playgroud)
本来应该
NSMutableArray* s = [[NSMutableArray alloc] init];
stack = s;
Run Code Online (Sandbox Code Playgroud)
但是,stack是我的类的保留属性.它的声明如下:
@interface StateStack ()
@property (nonatomic, retain) NSMutableArray* stack;
@end
Run Code Online (Sandbox Code Playgroud)
我的印象是,当您指定'retain'变量时,它会自动增加对象的retainCount.所以你应该从释放指针开始(如此处所示).
为什么这两种情况不同?谢谢!
因为您必须分配属性,而不是实例变量.当您分配给该属性时,它将再次保留该变量,然后您将不会遇到该问题.以下是您的代码应该如何:
NSMutableArray* s = [[NSMutableArray alloc] init];
self.stack = s;
[s release];
Run Code Online (Sandbox Code Playgroud)
这样你就不会分配给变量,而是使用属性(实际上是一个方法).如果在这种情况下没有释放,那么代码中就会出现内存泄漏.
当你执行stack = s时,你直接分配给实例变量,并且从不保留数组.
归档时间: |
|
查看次数: |
392 次 |
最近记录: |