Opt*_*ime 1 memory-management objective-c ios
我是Objective-C和iOS开发的新手,我目前正在努力掌握如何进行内存管理.我的应用程序在非ARC btw.
除了行belove之外,该对象不会在代码中的任何地方声明(不是.h或任何其他内容).我是否需要以任何方式释放/释放此对象以在我使用它时清除它的空间,或者这是自动完成的吗?
NSMutableURLRequest *restRequest = [[NSMutableURLRequest alloc] init];
Run Code Online (Sandbox Code Playgroud)
这个也是如此.不确定这是否是同一个问题,但在这里我在使用之前不使用alloc和init这两个词.这有什么不同吗?
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我在.h文件中定义对象并保留它.这是否意味着该变量将永远存在于内存中(当一旦被盲目初始化时),除非我释放/解除它?我想如果是这种情况,那么在视图卸载时我应该在视图中做些什么?
@interface Storeage : NSObject {
NSString *deviceToken;
}
@property (nonatomic, retain) NSString *deviceToken;
Run Code Online (Sandbox Code Playgroud)
在.m文件中,我将像第一种或第二种情况一样分配和使用这个对象(似乎没有任何区别).
如果这个问题很愚蠢,请耐心等待.我习惯用GC进行低级Java编程.
小智 6
我是否需要以任何方式释放/释放此对象以在我使用它时清除它的空间,或者这是自动完成的吗?
由于您不使用ARC,因此需要手动向其发送release消息以便处置其所有权.(好的建议:不要考虑"释放内存".引用计数意味着你增加和减少引用计数,你拥有并停止拥有对象,一个对象在丢失所有引用后重新分配自动完成.换句话说,release并不一定意味着重新分配.)
这个也是如此.不确定这是否是同一个问题,但在这里我在使用之前不使用alloc和init这两个词.这有什么不同吗?
确实如此.你只是你创建一个使用自己的对象alloc,new,copy,mutableCopy或参考使用retain.你不在这里做任何一个,所以你也不必担心释放它.(从技术上讲,它是一个将被返回的自动释放实例,运行循环将处理它.)
在.m文件中,我将像第一种或第二种情况一样分配和使用这个对象(似乎没有任何区别).
区分实例变量和属性.属性setter方法(如果声明为retainor strong)将保留(增加引用计数)对象.但只有在使用访问器方法时才会这样,而在直接访问实例变量时则不然.如果你写了这个:
variable = [[SomeObject alloc] init];
Run Code Online (Sandbox Code Playgroud)
然后你需要释放它就像你使用任何其他(本地)变量一样:
[variable release];
Run Code Online (Sandbox Code Playgroud)
如果您使用访问器方法来设置它:
self.variable = [[[SomeObject alloc] init] autorelease];
Run Code Online (Sandbox Code Playgroud)
然后你必须autorelease在创建它时使用(否则它将具有2的引用计数,你将泄漏内存).
在这两种情况下,您也可以self.variable = nil;用来放弃所有权.这仅适用于属性.
所有这些都随着ARC的引入而发生了根本性的变化,我在这里没有解释这有三个原因:
我无论如何都不是ARC专家;
在尝试使用ARC之前,我想鼓励你学习MRC(你似乎有意).
这不是问题.
| 归档时间: |
|
| 查看次数: |
3261 次 |
| 最近记录: |