随笔分类 -  04 内存管理

摘要:1、指针和对象,都是内存块。一个大,一个小。一个在栈中,一个在堆中。2、iOS中,我们可以生命一个指针,也可以通过alloc获取一块内存。3、我们可以直接消灭掉一个指针,将其置为nil。但是我们没办法直接消灭一块对象内存。对于对象内存,我们永远只能依靠系统去回收。而什么时候回收,就需要使用苹果为我们... 阅读全文
posted @ 2014-04-29 16:29 ygm900 阅读(1486) 评论(0) 推荐(0) 编辑
摘要:1、怎样写一个不泄漏的NavigationController页面跳转程序?非arc模式下,假设有A、B两个viewController,从A推到B,怎样写内存才能不泄漏?A.m-(IBAction)btnGoToViewControllerB:(id)sender{ ViewControll... 阅读全文
posted @ 2014-04-29 16:02 ygm900 阅读(2516) 评论(1) 推荐(0) 编辑
摘要:在我的理解来说: 对象(object)即一块内存,本文要探讨的是一个Objective-C对象在内存的布局(layout)问题,水果的官方文档有说,一个类(class)如果不需要从NSObject继承其某些特定的行为是不用继承NSObject的,这里我将讨论限制在继承了NSObject的类的对象范... 阅读全文
posted @ 2014-04-29 07:58 ygm900 阅读(2846) 评论(1) 推荐(1) 编辑
摘要:苹果:Instruments User GuideiPhone Memory Debugging with NSZombie and Instruments苹果:Mac OS X Debugging Magic——高级瓶盖调试技巧必备 阅读全文
posted @ 2014-04-29 07:48 ygm900 阅读(397) 评论(0) 推荐(0) 编辑
摘要:一句话:dealloc 就是释放当前类所持有的对象即可。不是当前类持有的对象,就不要去释放了。但是当前类持有的对象,一定要释放。推荐以下视频,虽然简单,但是基本原理讲清楚了。http://code4app.com/course/24-2904-3022在非ARC开发环境中,dealloc是类释放前,... 阅读全文
posted @ 2014-04-27 04:31 ygm900 阅读(1163) 评论(0) 推荐(0) 编辑
摘要:关于ios内存管理。在开发过程中,内存管理很重要,我简单说明一下。1.正确用法UIView*v = [[UIViewalloc]init]; //分配后引用计数为1[self.viewaddSubview:v];//这儿引用计数加1,为2[vrelease];//这儿引用计数为1最后系统在回收sel... 阅读全文
posted @ 2014-04-24 00:06 ygm900 阅读(318) 评论(0) 推荐(0) 编辑
摘要:from: 10​天​掌​握​i​O​S​开​发​之​D​a​y​2​ ​-​ ​内​存​管​理 阅读全文
posted @ 2014-04-23 23:59 ygm900 阅读(216) 评论(0) 推荐(0) 编辑
摘要:ios的内存管理,包括对象的所有权与引用计数、自动释放、访问器方法与属性、一些会改变引用计数的特殊情况 ----- 对象所有权(ownership) 与引用计数 (retain count 、reference count) 当一个所有者(owner,其本身可以是任何一个Objective-C对象)... 阅读全文
posted @ 2014-04-23 23:50 ygm900 阅读(408) 评论(0) 推荐(0) 编辑
摘要:转:http://www.cocoachina.com/applenews/devnews/2013/1126/7418.html内存管理策略(memory Management Policy)NSObject protocol中定义的的方法和标准命名惯例一起提供了一个引用计数环境,内存管理的基本模... 阅读全文
posted @ 2014-04-23 23:21 ygm900 阅读(263) 评论(0) 推荐(0) 编辑
摘要:警告:value stored to value2 during its initialization is never readNSMutableArray *datesArray = [[NSMutableArray alloc]init];datesArray = [_onDemandDict... 阅读全文
posted @ 2014-04-17 15:30 ygm900 阅读(3426) 评论(0) 推荐(0) 编辑
摘要:在project-setting中找到 “Run Static Analyzer” 键,然后把值修改为“YES”.这样在编码的时候,xcode就可以自动为我们检查内存泄露了.原图片:http://blog.csdn.net/shijiucdy/article/details/8185968xcode... 阅读全文
posted @ 2014-04-16 13:26 ygm900 阅读(2486) 评论(0) 推荐(0) 编辑
摘要:1、一个关于委托内使用全局变量和属性变量的经验经验:1、属性变量进入委托方法,无论之前retain count为几,出来后将被置为1。2、全局变量进入委托方法, 无论之前retain count 为几,委托方法执行完后将被dealloc.3、同样是属性变量,如果在委托方法中使用self.** 则执行... 阅读全文
posted @ 2014-04-15 22:35 ygm900 阅读(199) 评论(0) 推荐(0) 编辑
摘要:Lazy,谁懒?当然是计算机偷懒。通常用法,你有一个NSArray的property,但是你不在初始化方法里为其alloc/init,它就只是一个指针,不会占用内存。然后你写了此property的访问器,在访问器里判断此property的指针是否为空,若为空,就alloc/init,这时才真正生成这... 阅读全文
posted @ 2014-04-14 13:36 ygm900 阅读(743) 评论(0) 推荐(0) 编辑
摘要:如果属性是copy、retain的话是等价的。如下:- (void)setXXX:(NSString*)axx{ if (_xxx != axx) { [_xxx release]; _xxx = [axx copy]; }}拆分下就知道了, 将nil代入(即axx) 对nil进行retain/copy返回仍然是nil所以,等价。转:http://www.cocoachina.com/ask/questions/show/94713 阅读全文
posted @ 2013-12-18 18:19 ygm900 阅读(342) 评论(0) 推荐(0) 编辑
摘要:1.IBOutlet对象需要release2.不停的往UIView,特别是UIScrollView上add相同SubView。一定要记得清除之前的SubView,并且在dealloc函数中执行该方法for(UIView* sbViewinscrvBg.subviews){ [sbViewremoveFromSuperview];}这里还有个获得subView的小技巧:[subViewsetTag:300];subView = [self.viewviewWithTag:300]3.dealloc不一定会被调用,所以可以自己手写一个myRelease方法,当退出该界面的时候手动调用releas. 阅读全文
posted @ 2013-07-15 11:44 ygm900 阅读(3308) 评论(0) 推荐(1) 编辑
摘要:copy与retain的区别:copy是创建一个新对象,retain是创建一个指针,引用对象计数加1。Copy属性表示两个对象内容相同,新的对象retain为1,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。 retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain是指针拷贝,copy是内容拷贝。当然在ios中并不是所有的对象都支持copy,mutableCopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutableCopying 协议的类才可以发送mutableC.. 阅读全文
posted @ 2013-06-26 03:41 ygm900 阅读(240) 评论(0) 推荐(1) 编辑
摘要:在返回按钮中,释放内存:-(IBAction)btnBack:(id)sender{ if ([self.str_superViewName isEqualToString:@"ShakeViewController"]) { [configData setObject:@"YES" forKey:@"isShake"]; } //移出两个比较大的重要的子页面 [self.uisv_scrollView0 removeFromSuperview]; [self.scrView removeFromSuperview]; //移出所有子 阅读全文
posted @ 2013-06-09 11:31 ygm900 阅读(371) 评论(0) 推荐(1) 编辑
摘要:NSArray *views = [self.view subviews]; for (id obj in views) { NSLog(@"obj class === %@",[obj class]); [obj removeFromSuperview]; } 阅读全文
posted @ 2013-06-09 11:24 ygm900 阅读(154) 评论(0) 推荐(0) 编辑
摘要:在iOS开发中,为了节约时间,程序员经常会用全局变量代替属性。但是这样做,尤其是新手开发中,经常会引起内存泄露的报错,其实作为苹果自己也没有给出一个完美安全的内存管理代码例子。但是在iOS开发到如今,有一个相对比较安全的内存管理模版。 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. CGRect fram=[UIScreen mainScreen].bounds; UIView *... 阅读全文
posted @ 2013-06-08 17:55 ygm900 阅读(1847) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示