2011-06-15 44 views
0

对于非指针变量,我必须在类的dealloc方法中调用release吗?必须在dealloc中释放非指针实例变量吗?

例如

@interface myClass : NSObject { 

    BOOL isDirty; // do i have to release this? 
    NSInteger hoursSinceStart; // and this? 

    NSDate *myDate; // i will release the pointer in dealloc 
} 

@property (assign, nonatomic) NSInteger hoursSinceStart; // property to release? 

@property (assign, nonatomic) BOOL isDirty; // property to release? 
@end 
+0

不,这些值将保留在堆栈中,并在程序调用dealloc方法时弹出。 – fatih 2011-06-15 19:52:11

+1

@faith我怀疑dealloc与堆栈变量有什么关系? – Tatvamasi 2011-06-15 20:04:07

回答

5

两件事情:

  1. 你只需要保留和释放对象。 BOOL和NSInteger不是对象,它们是基元。

  2. 您一般不应该叫release任何assign财产,因为你没有保留它 - 当然assign的是有道理的像NSIntegers或布尔值将原语的唯一类型,因为你不能留住他们首先。

+0

谢谢!清晰直线! :) – gonzalesblanco 2011-06-18 21:57:37

0

您将全部发布扩展NSObject(或实现NSObject协议)的对象。
请阅读http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html以更好地理解内存管理。

+0

嗯,从技术上来说,它是符合'NSObject' *协议*的任何对象,并且按照惯例(不是语言法则),这是每个类都有。 – 2011-06-15 19:54:24

+0

@Jonathan Grynspan你是对的。将编辑。 – Tatvamasi 2011-06-15 19:55:50

+0

它在问题中没有提到,但是不要忘记在'-dealloc'中释放()'手动的'malloc()''d内存。任何动态分配的内存,真的。 – 2011-06-15 20:03:56