IOS:使用@property释放variables(非primefaces,保留)
如果variables与@property nonatomic和保留被明确释放。
@interface MyScreenViewController : UIViewController <UIWebViewDelegate> { UIWebView* greetingView; } @property(nonatomic, retain) IBOutlet UIWebView* greetingView; - (void)dealloc { [greetingView release]; }
是释放delloc方法必需?
当然。 是的,你应该释放你的财产保留,复制,不要分配。 在viewDidUnload中将属性设置为Nil。
- (void)viewDidUnload { [super viewDidUnload]; self.greetingView = nil; } - (void)dealloc { [greetingView release],greetingView = nil; [super dealloc]; }
请参阅UIViewController类的引用中的内存pipe理: http : //developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html
内存是iOS的关键资源,视图控制器提供内置的支持,以减less关键时刻的内存占用。 UIViewController类通过didReceiveMemoryWarning方法提供了一些自动处理低内存条件的方法,释放不需要的内存。 在iOS 3.0之前,这种方法是释放与您的自定义视图控制器类相关的额外内存的唯一方法,但在iOS 3.0和更高版本中,viewDidUnload方法可能是更适合大多数需求的地方。
当发生低内存警告时,如果UIViewController类知道它可以重新加载或稍后再次重新创build,则清除其视图。 如果发生这种情况,它还会调用viewDidUnload方法,让您的代码有机会放弃与视图层次关联的任何对象的所有权,包括用nib文件加载的对象,在viewDidLoad方法中创build的对象以及在运行时并添加到视图层次结构中。 通常,如果您的视图控制器包含插口(包含IBOutlet关键字的属性或原始variables),则应该使用viewDidUnload方法放弃这些插口的所有权或您不再需要的任何其他视图相关数据。
是的,你应该释放它,因为它是一个保留的财产。 任何保留(或复制)的属性都应该由同一个类来释放(如果被赋值,则不需要释放)。
保留基本上就像一个class级说:“我将要使用这个其他class级,所以保持记忆。” dealloc
就是这样说的那个类本身将被从内存中删除的地方。 所以,如果需要保留财产的类即将消失,那么该对象本身也应该被释放。
否则,它只是坐在那里的记忆,当没有其他的程序需要它。 如果这种事情继续发生,你会用完内存。
(另外,确保你在dealloc方法的末尾调用[super dealloc]
。)