当前位置:编程学习 > wap >>

切换视图导致内存泄漏

我用一个uiviewcontroller管理多个视图。切换视图后,把不显示的视图释放掉。
uiview1 *view1 = [[uiview1 alloc] init...];
self.view = view1;
[view1 release];
虽然我在视图上添加了很多subview但是能保证都释放掉了。可是内存就是回不到原来的水平了。
视图1:7M
视图2:13M
视图1:8M
视图2:13M
视图1:8M
视图2:13M
视图1:8M
......
最后虽然稳定在8M,但是我的程序中有很多页面。如此增长肯定吃不消的。 --------------------编程问答-------------------- >>uiview1 *view1 = [[uiview1 alloc] init...];
>>self.view = view1;
>>[view1 release]; 
你的view1还没有被释放。Objective-C采用计数方式管理内存,只有当实例的引用数retain count为0时,调用Release才会被真正释放,否则只是将retain count减少1而已。

这里有一些关于iPhone程序开发不错的文章,推荐给LZ http://mobfan.cn --------------------编程问答--------------------
引用 1 楼 luwei103 的回复:
>>uiview1 *view1 = [[uiview1 alloc] init...];
>>self.view = view1;
>>[view1 release];
你的view1还没有被释放。Objective-C采用计数方式管理内存,只有当实例的引用数retain count为0时,调用Release才会被真正释放,否则只是将retain count减少1而已。

这里有一些关于iPhone程序开发不错的文章,推荐给LZhttp://mobfan.cn

当前的视图为view1,当我self.view = view2时,view1会被释放掉。
点操作符会把旧的release,把新的retain。 --------------------编程问答-------------------- 尝试一下显式释放呢 --------------------编程问答-------------------- uiview1 *view1 = [[uiview1 alloc] init...]; 
self.view = view1; 
[view1 release]; 

只有[view release]的时候才真正释放了。 --------------------编程问答-------------------- 你在切换到另一个视图的时候,把当前self.view的视图release掉,每次都NEW视图对象。这样就可以不用保存 --------------------编程问答-------------------- 一般是addSubView这样的处理。而后处理显示结束把subview弹出。而后再addSubView。
加入想做成幻灯片的功能,那么最好有两个view同时存在,而后之间切换赋值。
加入有需要我这里有实例代码。
另外推荐一下苹果开发中文网 www.CocoaDev.cn --------------------编程问答-------------------- 用错词了吧,这不是泄漏....7,13,8,14,9,15,10,16.....这样才叫泄漏.
你东西都还在引用着呢....当然内存还占着 --------------------编程问答-------------------- 路过学习一下,上边说的很有道理! --------------------编程问答-------------------- objc永远不要指望内存看起来申请和释放一致,它本身就有自己控制的东西,内存多少它说的算。
补充:移动开发 ,  iPhone
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,