ARC模式下delloc()注意事项
------------------------------------------------------------------------------------------------------------------------------------------------
一. 有一次面试问到:从VC1 推到VC2会不会调用dealloc呢?答案是不会
而从VC2 dismiss 会调VC2的dealloc
不会调用VC1的dealloc方法 有代码为证:
#import "ViewController.h"
#import "ViewController2.h"
@interface ViewController () @end @implementation ViewController - (void)dealloc
{
NSLog(@"ViewController dealloc");
} - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
} - (IBAction)goVC2:(id)sender {
ViewController2 *vc2 = [ViewController2 new];
[self presentViewController:vc2 animated:YES completion:^{ }]; } @end
#import "ViewController2.h" @interface ViewController2 () @end @implementation ViewController2 - (void)dealloc
{
NSLog(@"ViewController2 dealloc");
} - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
二. ViewController中被加入了定时器,而没有及时的invalidate ,会怎样?
#import "ViewController.h"
#import "ViewController2.h"
@interface ViewController ()
{
NSTimer *timer;
}
@end @implementation ViewController - (void)dealloc
{
NSLog(@"ViewController dealloc %@",self);
} - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
} -(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[timer invalidate];
} -(void)updateTime:(id)sender
{ NSLog(@"ViewController updateTime");
} - (IBAction)goVC2:(id)sender {
ViewController2 *vc2 = [ViewController2 new];
[self presentViewController:vc2 animated:YES completion:^{ }]; } @end
没调 [timer invalidate]; 打印
-- ::04.608616+ YiJTApp[:] ViewController updateTime
-- ::07.608558+ YiJTApp[:] ViewController updateTime
-- ::10.607419+ YiJTApp[:] ViewController updateTime
-- ::13.608551+ YiJTApp[:] ViewController updateTime
-- ::16.608406+ YiJTApp[:] ViewController updateTime
-- ::19.608554+ YiJTApp[:] ViewController updateTime
-- ::22.608535+ YiJTApp[:] ViewController updateTime
-- ::25.409616+ YiJTApp[:] ViewController2 dealloc
-- ::25.607751+ YiJTApp[:] ViewController updateTime
-- ::28.608624+ YiJTApp[:] ViewController updateTime
-- ::31.607510+ YiJTApp[:] ViewController updateTime
调 [timer invalidate]; 打印
-- ::12.271080+ YiJTApp[:] ViewController updateTime
-- ::23.268043+ YiJTApp[:] ViewController2 dealloc
不管是有定时器,或者被代理,block强引用。VC1都不会调delloc方法。
ARC模式下delloc()注意事项的更多相关文章
- ARC模式下的内存泄露问题
		ARC模式下的内存泄露问题 iOS提供的ARC 功能很大程度上简化了编程,让内存管理变得越来越简单,但是ARC并不是说不会发生内存泄露,使用不当照样会发生. 以下列举两种内存泄露情况: 死循环造成的内 ... 
- 在arc模式下 CGImage 释放问题
		//大图bigImage //定义myImageRect,截图的区域 if (imagecount >= 3) { CGRect myImageRect; if (i.size.width< ... 
- xcode4.3.2  arc模式下导入非arc的文件  转
		在arc模式下,我们经常会用到非arc的类库,此时我们可以在Compile Sources下对该文件进行编辑加入 -fno-objc-arc 如图中所示,就可以使用非arc的类库了 转:htt ... 
- 1.ARC模式下如何兼容非ARC的类
		ARC模式下如何兼容非ARC的类 :转变为ARC的, -f-objc-arc 非ARC模式下如何兼容ARC的类 :转变为非ARC -fno-objc-arc 
- WLC HA模式下的注意事项
		管理控制器:1.控制器默认开启的是SSH (CLI),Secure Web/https (GUI)2.登录控制器的管理地址为Active设备所控制(主备的配置同步,所以管理地址一致)3.WLC HA状 ... 
- ARC模式下的单例写法
		// 单例 + (id)sharedInstance { __strong static id sharedObject = nil; static dispatch_once_t onceToken ... 
- ARC模式下获取retainCount的方法
		_objc_rootRetainCount(obj)可以获取obj的retainCount,不过不清楚是不是私有api,因此建议调试时使用. 
- 0c-42-ARC模式下如何兼容非ARC的类
		1.ARC模式下如何兼容非ARC的类 让程序兼容ARC和非ARC部分.转变为非ARC -fno-objc-arc 2.将MRC转换为ARC ARC也需要考虑循环引用问题:一端用strong,一端用we ... 
- ASIHTTPRequest 在release(打包)模式下数据获取或post失败问题
		ASIHTTPRequest 在relase模式下失效 表现为,调用网络请求后没有任何反应 原因之一: ARC模式下,在ASIHTTPRequest 前面会加上__weak来解决循环应用,这个__we ... 
随机推荐
- win10 iis部署后 浏览目录报错 500.19
			错误摘要HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效.详细错误信息模块 IIS Web Core 通知 BeginReq ... 
- 各种开源许可 license 区别
			copy from http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html 
- [Web 前端] 028 jQuery 事件
			目录 jQuery 的事件 1. 事件绑定 1.1 事件的获取 1.2 基本绑定 1.3 动态绑定 2. 事件触发 2.1 触发的写法 2.2 常用的鼠标事件 3. 事件冒泡和默认行为 3.1 事件冒 ... 
- [转帖]同事推荐的的aira2
			Windows系统安装最新版Aria2客户端及使用教程 https://www.moerats.com/archives/519/ 改天学习一下. 说明:之前都是说的在Linux VPS服务器上安装A ... 
- [转帖]IDC发布2018下半年中国公有云市场报告
			IDC发布2018下半年中国公有云市场报告:AWS以6.4%的份额名列第四 http://www.itpub.net/2019/05/06/1793/ 电信的公有云 好像是用的 华为的技术. AWS在 ... 
- 【狗屁不通文章生成器】代码分析 (javaScript)
			这几天在论坛上看到了一个很有意思的项目,一个生成"狗屁不通"的文章的程序.经过本人确定其的确是"狗屁不通"后,随后又好奇其实现,于是在其[GitHub]项目里( ... 
- 打印页面内容,<input>不好使,用<textarea> 代替
			<textarea class="sld-textarea" onchange="changeTextareaValue(this)">123< ... 
- C++中的赋值操作符重载和拷贝构造函数
			1,关于赋值的疑问: 1,什么时候需要重载赋值操作符? 2,编译器是否提供默认的赋值操作符? 2,关于赋值的疑问: 1,编译器为每个类默认重载了赋值操作符: 1,意味着同类型的类对象可以相互赋值: 2 ... 
- Hyper-V Centos7 虚拟机固定IP
			在网上看到很多篇文章,自己也去试验过,结果实现的效果都不是很理想,并不是自己所需要的,下面是我自己研究,最后成功的经验,希望能够帮到大家.少走一些弯路. 需求 1.无论物理机的网络环境怎么变化,都需要 ... 
- W10: Warning: Changing a readonly file 解决办法
			在linux上编辑文件的时候,明明是使用的root登录的,可是这种至高无上的权限在按下i的时候被那串红色错误亵渎了W10: Warning: Changing a readonly file. 困扰两 ... 
