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 ...
随机推荐
- 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)
小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码) Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在GitHub上分享了自己如何使用P ...
- 获取当前操作的IFrame 对象的方法
分两种情况:第一种:获取iframe对象的JS函数在父页面上,如下 function getIframeByElement(element){ var iframe; $("iframe&q ...
- python string_1
quote :http://www.runoob.com/python/python-strings.html #coding:utf-8 s1="http://www.jnshu.com/ ...
- big data env setup
install Spark on CentOS: https://aodba.com/how-to-install-apache-spark-in-centos-standalone/ https:/ ...
- Linux 后台执行python或者java代码的命令
1.nohup 命令操作后台执行程序 后台启动 nohup python app.py params1 > nohup.out >& & 查看后台进程启动 jobs -l ...
- 【Qt开发】Qt让线程休息一段时间
Qt 为何没有提供 Sleep 论坛上不时见到有人问: Qt 为什么没有提供跨平台的 sleep 函数? 使用平台相关的 Sleep 或 nanosleep 以后,界面为什么没有反应? QThread ...
- Python_ONLINE_习题集_02 函数封装
2.1 封装函数实现如下要求 例如:输入2,5 则求:2 + 22+222 + 2222+22222的和 参考答案: https://www.bilibili.com/read/cv4185619 d ...
- excel导入导出(一)
excel导入导出 依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi& ...
- MySQL-快速入门(5)数据查询-常用关键字、分组查询、聚合函数
1.in关键字.in的效率高于or. in (value1,value2,...) 或者not in (value1,value2,...) 2.between ... and ... between ...
- Java中字符编码和字符串所占字节数 .
首 先,java中的一个char是2个字节.java采用unicode,2个字节来表示一个字符,这点与C语言中不同,C语言中采用ASCII,在大多数 系统中,一个char通常占1个字节,但是在0~12 ...