您知道哪些iPhone OS内存管理规则和操作方法?

Tha*_*nks 5 iphone memory-management objective-c uikit

目前我正在进入名为"iPhone OS中的内存管理"的冰冷水中.

这是我学到的一条规则:

每次我在我的方法中看到一个alloc时,我都会在方法的底部发布相应的变量.

每次我在我的头文件中创建一个@property(...)表示复制或保留时,我将该变量的释放消息放入dealloc方法.

每次我有IBOutlet,我都会做同样的事情.唯一例外:如果IBOutlet具有类似@property(... assign)的内容,或者换句话说:如果它具有assign关键字.然后我不关心在dealloc方法中释放它.

我觉得还有很多好的规则要知道!记下你的所作所为.让我们一起刮掉它们.也欢迎链接到精彩的描述.

mmc*_*mmc 4

实际上,任何时候初始化一个对象并且方法名称包含“init”时,您都有责任释放它。如果您使用不包含单词“init”的类方法创建一个对象,那么您就不会这样做。

例如:

  NSString *person = [NSString stringWithFormat:"My name is %@", name];
Run Code Online (Sandbox Code Playgroud)

不需要释放。但:

  Person *person = [[Person alloc] init];
Run Code Online (Sandbox Code Playgroud)

需要发布(正如您在问题中所述)。同样地:

  Person *person = [[Person alloc] initWithName:@"Matt"]];
Run Code Online (Sandbox Code Playgroud)

还需要释放。

这是一种约定,而不是语言的规则,但您会发现对于所有 Apple 提供的 API 都是如此。