ios 编程日记 :内存问题汇总

标签: ios 编程 日记 | 发表时间:2013-02-16 13:44 | 作者:blueboyhi
出处:http://blog.csdn.net

(1)UIView本身占用的内存并不是很大,但是使用这个方法(tempImage过大会占用很高的内存)

setBackgroundColor:[UIColor colorWithPatternImage:tempImage],这个怎么解决呢?推荐使用UIImageView,然后再setImage这个方法,这样内存基本不会增长

(2)任何一个UIView如果没有被remove掉,即使它被release掉了,依然占用着大量内存.UIView需要remove,数组需要清空;对于一个拥有大量subView的UIView,要最好使用一个for循环来执remove操作for(UIView * temp in [myview subviews]) {temp removeFromSuperview}

(3)隐藏内存泄漏,比如一个UIView,fatherView,上面有许多的子视图(subviews),如果有释放内存的时候仅仅释放fatherView的内存(对其执行remove,release操作),那么此处必定内存无法回收。即使你的subviews已经release了,retainCount=0,但是并没有remove,所以这也是内存泄漏。

(4)下面说说alloc、retain、copy,见到这三个不用说必须release。alloc和retain都会造成计数器+1

ClassA *obj1 = [[ClassA alloc] init];// obj1的计数器加1

ClassA *obj2=obj1;                       // obj1的计数器再次加1为2

[obj2 retain];                                //  这样写计数器加1为1

[obj1 release];                              //  obj1的计数器减1为0

[obj2 release];                              //  这里也可以写成[obj1 release] ,基于谁retain谁释放原则最好不这么写

----------------------------

说下copy深拷贝和retain浅拷贝的区别

ClassA *obj1 = [[ClassA alloc] init]; // obj1计数器j加1

ClassA *obj2 = [obj1 copy]            //  obj1计数器不加1,obj2计数器加1

[obj1 release]                                 // obj2计数器为0,释放时必须这样写了

[obj2 release]                                 // obj1计数器为0

如上,这里注意释放对象及释放顺序

(5)关于属性声明

readonly属性: 只能读,不能写;
assign属性: 是默认属性,直接赋值,没有任何保留与释放问题;
retain属性: 会增加原有对象的引用计数并且在赋值前会释放原有对象,然后在进行赋值;
copy属性: 会复制原有对象,并在赋值前释放原有对象,然后在进行赋值;

说道属性顺便说下self.属性 = 值,self set属性 = 值,属性 = 值,这三种赋值的区别

第一种和第二种方式都会造成计数器加1,需要release掉,而第三种直接赋值给属性可以称为弱引用没有计数器加1。如果释放掉后会造成n内存释放过度。

(6)[(UIButton *)[self.view viewWithTag:123] removeFromSuperview]和[[self.view viewWithTag:123] removeFromSuperview]效果是不一样的,通过tag取出来的对象需要类型转换才能正确移除掉;

(7)完全释放一个对象的参考代码: 

[m_text release]; 
m_text = nil;
作者:blueboyhi 发表于2013-2-16 13:44:35 原文链接
阅读:26 评论:0 查看评论

相关 [ios 编程 日记] 推荐:

ios 编程日记 :内存问题汇总

- - CSDN博客移动开发推荐文章
(1)UIView本身占用的内存并不是很大,但是使用这个方法(tempImage过大会占用很高的内存). setBackgroundColor:[UIColor colorWithPatternImage:tempImage],这个怎么解决呢. 推荐使用UIImageView,然后再setImage这个方法,这样内存基本不会增长.

苹果WWDC 2014汇总:iOS 8、OS X和新的编程语言

- - ITeye资讯频道
北京时间6月3日凌晨1点,苹果在美国旧金山Moscone中心举行了一年一度的WWDC开发者大会. 传闻中的iPhone 6、Retina版本的MacBook Air、4K分辨率的iMac均爽约,这是一场只有软件没有硬件的发布会. 1.  全新的Mac OS X 10.10 Yosemite. 没有任何悬念,今年的 WWDC 如期发布了全新的OS X Yosemite.

[IOS]iOS App性能优化

- - 操作系统 - ITeye博客
iOS App的性能关注点. 虽然iPhone的机能越来越好,但是app的功能也越来越复杂,性能从来都是移动开发的核心关注点之一. 我们说一个app性能好,不是简单指感觉运行速度快,而应该是指应用启动快速、UI反馈响应及时、列表滚动操作流畅、内存使用合理,当然更不能随随便便Crash啦. 工程师开发应用时除了在设计上要避免性能“坑”的出现,在实际遇到“坑”时也要能很快定位原因所在.

iOS 5评测

- littlepush - Solidot
Ars Technica的评测认为iOS 5值得升级,当然它也不可避免的存在一些小问题,给用户增添些烦恼. 用户在升级前最好手动备份一下iDevice,确保所有的应用都能转移.

关于iOS 7

- - 曉生
上手使用2天,感觉ios7的方向挺对,有设计的不错的地方,比如系统功能交互的完善和动效细节. 但界面有不够完善之处,比如颜色不够统一,难以理解相机和设置为什么用那么难看的渐变灰色,控制中心太像交互原型图,更主要是功能缺乏分类,但相信这只是beta版的问题,就像ios7运行还不够流畅一样,都还需要时间去完善.

[转]WebKit in iOS 8

- - justinjing的专栏
让我们说说iOS 8 的WebKit吧. WWDC 2014前几天,就有人发现了苹果向WebKit开源项目提交了一些很令人兴奋的代码,暗示了OS X和iOS,特别是iOS上的WebKit架构有所变化. 果不其然,WWDC上公布了iOS的新框架WebKit.framework,正式推出了新的网页浏览控件WKWebView.

Adobe Reader for iOS发布

- laguna - Solidot
tbw 写道 "Adobe也许在计算机桌面的PDF市场占统治地位,但是,Adobe基本上把iPhone和iPad等移动设备的PDF市场留给了竞争对手,如GoodReader和苹果的iBooks. Adobe在公司博客中宣布,它已推出iPhone和iPad通用的“Adobe Reader for iOS”软件.

iOS开发资源

- - Starming星光社最新更新
iOS App UI 欣赏、分享精美的App界面设计. iOS代码实例搜索、iOS特效示例、iOS代码例子下载. 以web的形式提供iOS UI设计的素材,你可以在web上拖动一些控件做出简单的ios 应用效果,并且生成一个URL,能分享给其他人. 一款 Photoshop 插件,由 UI Parade 推出的一款针对iOS UI 的设计工具,设计师动动鼠标即可制作精美的 iOS 应用原型.

iOS Web App初步

- - 新浪UED
iOS Web App开发,配合HTML5,是目前比较热门的话题. 今天,先抛开HTML5,我们来尝试在PhoneGap框架上进行简单的开发. PhoneGap是一个使用HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台. 它使开发者能够利用iPhone,Android,Palm,Symbian,WP7,Bada和Blackberry等智能手机的核心功能——包括地理定位,加速器,联系人,声音和振动等,此外PhoneGap拥有丰富的插件,可以以此扩展无限的功能.

iOS 免费接口

- - ITeye博客
京东获取单个商品价格接口:. http://p.3.cn/prices/mgets?skuIds=J_商品ID&type=1. ps:商品ID这么获取:http://item.jd.com/954086.html. http://www.kuaidi100.com/query?type=快递公司代号&postid=快递单号.