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

 一. 有一次面试问到:从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. SQLSERVER 和 ORACLE 查询数据库文件大小

    SQLSERVER: SQLSERVER一个库的文件分为数据文件(行数据)和日志文件两个文件,详情可以在数据库的属性->文件中查看. 在资源管理器中打开文件所在路径可以直接看到这两个文件 但是, ...

  2. django连接和游标

    连接和游标主要实现 PEP 249中描述的Python DB API标准——除非它涉及到事务处理. 如果你不熟悉Python DB-API,注意cursor.execute()中的SQL语句使用占位符 ...

  3. unittest单元测试1

    一个简单的单元测试例子#coding:utf-8from selenium import webdriverimport unittestclass Baidu(unittest.TestCase): ...

  4. 堆排序 && Kth Largest Element in an Array

    堆排序 堆节点的访问 通常堆是通过一维数组来实现的.在数组起始位置为0的情形中: 父节点i的左子节点在位置(2*i+1); 父节点i的右子节点在位置(2*i+2); 子节点i的父节点在位置floor( ...

  5. AngularJS——基础小知识(一)

    $time0ut :定时器 $rootscope :全局的 $scope : 局部的作用域:   它下面的方法: $scope.$watch $scope.$apply   1)$scope.$wat ...

  6. maven指定本地jar包

    来自 https://blog.csdn.net/zhengxiangwen/article/details/50734565 一.怎么添加jar到本地仓库呢?步骤:1.cmd命令进入该jar包所在路 ...

  7. [Web 前端] 034 计算属性,侦听属性

    目录 0. 方便起见,定个轮廓 1. 过滤器 2. 计算属性 2.1 2.2 3. 监听属性 0. 方便起见,定个轮廓 不妨记下方的程序为 code1 <!DOCTYPE html> &l ...

  8. 关于Pulsar与Kafka

    在本系列的Pulsar和Kafka比较文章中,我将引导您完成我认为重要的几个领域,并且对于人们选择强大,高可用性,高性能的流式消息传递平台至关重要.消息传递模型(Messaging model)是用户 ...

  9. [LeetCode] 108. 将有序数组转换为二叉搜索树

    题目链接 : https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/ 题目描述: 将一个按照升序排列的 ...

  10. mybatis oracle 批量新增

    假定场景:批量导入用户信息 一般批量新增使用 SELECT … INSERT INTO 和 INSERT INTO … SELECT 我们这次使用第二种 一.先建一张用户信息表模拟批量导入用户信息 c ...