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

 一. 有一次面试问到:从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()注意事项的更多相关文章

  1. ARC模式下的内存泄露问题

    ARC模式下的内存泄露问题 iOS提供的ARC 功能很大程度上简化了编程,让内存管理变得越来越简单,但是ARC并不是说不会发生内存泄露,使用不当照样会发生. 以下列举两种内存泄露情况: 死循环造成的内 ...

  2. 在arc模式下 CGImage 释放问题

    //大图bigImage //定义myImageRect,截图的区域 if (imagecount >= 3) { CGRect myImageRect; if (i.size.width< ...

  3. xcode4.3.2 arc模式下导入非arc的文件 转

    在arc模式下,我们经常会用到非arc的类库,此时我们可以在Compile Sources下对该文件进行编辑加入 -fno-objc-arc   如图中所示,就可以使用非arc的类库了   转:htt ...

  4. 1.ARC模式下如何兼容非ARC的类

    ARC模式下如何兼容非ARC的类 :转变为ARC的, -f-objc-arc 非ARC模式下如何兼容ARC的类 :转变为非ARC -fno-objc-arc

  5. WLC HA模式下的注意事项

    管理控制器:1.控制器默认开启的是SSH (CLI),Secure Web/https (GUI)2.登录控制器的管理地址为Active设备所控制(主备的配置同步,所以管理地址一致)3.WLC HA状 ...

  6. ARC模式下的单例写法

    // 单例 + (id)sharedInstance { __strong static id sharedObject = nil; static dispatch_once_t onceToken ...

  7. ARC模式下获取retainCount的方法

    _objc_rootRetainCount(obj)可以获取obj的retainCount,不过不清楚是不是私有api,因此建议调试时使用.

  8. 0c-42-ARC模式下如何兼容非ARC的类

    1.ARC模式下如何兼容非ARC的类 让程序兼容ARC和非ARC部分.转变为非ARC -fno-objc-arc 2.将MRC转换为ARC ARC也需要考虑循环引用问题:一端用strong,一端用we ...

  9. ASIHTTPRequest 在release(打包)模式下数据获取或post失败问题

    ASIHTTPRequest 在relase模式下失效 表现为,调用网络请求后没有任何反应 原因之一: ARC模式下,在ASIHTTPRequest 前面会加上__weak来解决循环应用,这个__we ...

随机推荐

  1. flultter listview异常type '(BuildContext, int) => dynamic' is not a subtype of type '(BuildContext, int) => Widget'

    type '(BuildContext, int) => dynamic' is not a subtype of type '(BuildContext, int) => Widget' ...

  2. 【Linux 应用编程】进程管理 - 进程、线程和程序

    基本概念 程序和进程的区别 程序是平台相关的二进制文件,只占用磁盘空间.编写完程序代码后,编译为可执行的二进制文件即可. 进程是运行中的程序,占用 CPU.内存等系统资源. 通过 Shell 命令,可 ...

  3. wcf restful 访问报错 *.svc HTTP error 404.17 - Not Found

    安装完成 iisreset,即使不重启也已经可以使用了

  4. 2.nginx配置详细说明

    Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...

  5. Java程序的运行过程,以及Java为什么能够跨平台

    Java程序运行机制  Java的运行主要分两步:先编译再解释执行 (1)先通过“编译器”将Java源程序(.java)编译成Java字节码文件(.class) (2)通过不同的虚拟机(JVM)将字节 ...

  6. rename批量修改文件名

    批量改名: 如文件,批量修改,把hello去掉[root@localhost wang]# ll-rw-r--r-- 1 root root 0 5月 14 02:36 a.hello.txt-rw- ...

  7. 从企业版BOSS直聘,看求职简历技巧

    有时候,不是我们不可以,而是我们连面试的机会都没有.希望这篇文章能帮助大家找工作,有一个展示自己的机会. [ ] 最近负责测试的面试工作,在等HR推简历的时候害怕错过优秀的伙伴,找HR拿到了公司在BO ...

  8. [转帖]Docker从入门到动手实践

    Docker从入门到动手实践 https://www.cnblogs.com/nsky/p/10853194.html dockerfile的图很好呢. 但是自己没有做实验 , 其实知识都挺好. do ...

  9. 码云与Git的使用

    码云注册和使用 网址:https://gitee.com 注册之后新建一个仓库 接下来安装Git 协同开发Git安装与使用 下载地址:https://gitforwindows.org 安装完成之后选 ...

  10. Resharper 2019.1.1 破解

    本文链接:https://blog.csdn.net/qq_21361809/article/details/92423949                           Resharper ...