技术开发 频道

iPhone开发:Objective-C语法入门

  More on Memory Management

  Objective-C的内存管理系统基于引用记数。所有我们需要关心的就是跟踪我们引用,以及在运行期内是否真的释放了内存。

  用最简单的术语来解释,当我们alloc一个对象的时候,应该在某个时候retain了它。每次我们调用了alloc或者retain之后,我们都必须要调用release。

  ///// 。。。图。。。。

  这就是引用记数理论。但是在实践的时候,只有两种情况我们需要创建一个对象:

  1. 成为一个类的成员变量

  2. 只临时的在一个函数里面被使用

  在更多的时候,一个成员变量的setter应该仅仅autorelease旧的对象,然后retain新的对象。我们只需要在dealloc的时候调用release就可以了。

  所以真正需要做的就是管理函数内部的local的引用。唯一的原则就是:假如我们alloc或者copy了一个对象,那么我们在函数结束的时候需要release或者autorelease它。假如我们是通过别的方式创建的,就不管。

  这里是管理成员对象的例子:

  - (void) setTotalAmount: (NSNumber*)input

  {

  [totalAmount autorelease];

  totalAmount
= [input retain];

  }

  
- (void) dealloc

  {

  [totalAmount release];

  [super dealloc];

  }

 

  这里是本地引用的例子。我们只需要release我们用alloc创建的对象:

  NSNumber* value1 = [[NSNumber alloc] initWithFloat:8.75];

  NSNumber
* value2 = [NSNumber numberWithFloat:14.78];

  
// only release value1, not value2

  [value1 release];

 

  这里是用本地引用对象去设一个成员变量的例子:

  NSNumber* value1 = [[NSNumber alloc] initWithFloat:8.75];

  [self setTotal:value1];

  NSNumber
* value2 = [NSNumber numberWithFloat:14.78];

  [self setTotal:value2];

  [value1 release];

 

  注意到如何管理本地引用其实都是一样的。不管你是否把它设给了一个成员变量。我们无须考虑setters的内部实现。

  如果我们很好的理解了这些的话,我们基本上理解了80%的Objective-C内存管理方面的内容了。

0
相关文章