首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iPhone - 什么时候是一个叫做viewcontroller的dealloc?

在iPhone开发中,当一个名为ViewController的对象被释放时,即为dealloc。dealloc是Objective-C中的一个方法,它在对象被释放之前被调用,用于执行一些清理工作,如释放内存、关闭文件、断开网络连接等。

在iOS应用程序中,ViewController是一个常见的类,它负责管理应用程序的用户界面。当用户在应用程序中切换页面或关闭页面时,ViewController对象可能会被释放。因此,当一个ViewController对象被释放时,即为dealloc。

需要注意的是,dealloc方法不是必须的,它只在需要执行一些特殊的清理工作时才需要实现。在大多数情况下,系统会自动处理内存管理,开发者不需要关心dealloc方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

didReceiveMemoryWarning iOS开发

iPhone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送Memory Warning消息。...因此处理的主要工作是在viewController。 我们知道,创建viewcontroller时,执行顺序是loadview -> viewDidLoad。...这个方法的默认实现是这样:先寻找有关可用的nib文件的信息,根据这个信息来加载nib文件,如果没有有关nib文件的信息,默认实现会创建一个空白的UIView对象,然后让这个对象成为controller的主...网上对这个函数的描述含含糊糊,看了等于没看。 另外:如果controller存储了其他object和view的引用,你还得在dealloc方法中释放这些内存。...对于iOS2.x,你还必须在调用super dealloc方法前将这些引用置为nil。

2.6K30
  • iOS 如何解决 NSTimer 循环引用

    当你在 VC 的 dealloc 方法中销毁 timer,发现 VC 被 pop,VC 的 dealloc 方法没走,VC 在等 timer 释放才走 dealloc,timer 释放在 dealloc...,然后在 dealloc 方法中执行 NSTimer 的销毁,相对的 PFTimer 也会进行销毁了。...使用 block 来解决 ---- 通过创建一个 NSTimer 的 category 名字为 PFSafeTimer,在 NSTimer+PFSafeTimer.h 代码如下: #import 的 target 是 NSTimer 类对象,这是个单例,因此计时器是否会保留它,其实都无所谓。此处依然有保留环,然而因为类对象(class object)无需回收,所以不用担心。...); } @end 当 pop 当前 viewController 时候,打印结果: -[ViewController1 dealloc] 通过 PFProxy 这个伪基类(相当于 ViewController1

    1.5K30

    iOS 中block结构的简单用法 原

    : void (^myBlock)(); 其中第一个void是返回值,可以是任意类型,中间括号中^后面的是这个block变量的名字,我把它命名为myBlock,最后一个括号中是参数,如果多参数,可以写成如下样式...注意:1、在上面的代码里 block1是一个对象,如果直接打印将打印对象地址         2、block(),加上后面的括号才是执行block语句块 三、block中访问对象的微妙关系 1、如果你在一个... number;  } @end @implementation ViewController2 -(void)dealloc{     NSLog(@"dealloc %@",self.class);...,ViewController2,ViewController3; 1、在ViewController1中创建一个按钮,跳转ViewController2 2、在ViewController2中: #import...} @end @implementation ViewController3 -(void)dealloc{     NSLog(@"dealloc %@",self.class); } - (void

    58930

    iOS开发笔记(四)

    前言 最近遇到一个苦恼的问题,寻找了漫长的时间才解决。 起因是项目需要fork一个新的分支到新的git,于是把代码复制到新的git,创建git库,然后推送,一切正常。...举一个简单的例子: PRODUCT_NAME = Live IPHONEOS_DEPLOYMENT_TARGET = 7.0 // 1: iPhone/iPod touch. 2: iPad....查看内购记录 最近一个用户反馈,他购买一个588钻石,已经付款但是没有收到钻石; 后台在查看最新的充值记录里面,并没有用户对应的订单号; 用户用的是苹果的IAP,支付宝、微信也没有记录; 于是让用户提供账号密码...,终于弄来一个iOS 8.4版本的iphone,真机调试后发下问题: 新版本的手绘礼物,监听了钻石更新的notify,但是没有在dealloc的时候移除,并且测试的时候亦没有测出来。...,需要考虑用户所在ViewController是否合适弹出;同时考虑是否弹出选择框;如果是进入直播间,要考虑当前是否正在直播间内等情况。

    1.2K70

    编码篇-继承+通知看方法的实现和delloc方法的调用

    而且重写该方法时不能显式调用[super dealloc],和继承中先加载父类再加载子类相反,注销时先注销子类之后再注销父类。因为系统会自动帮你调用父类的dealloc方法。...1.通知的观察者,或KVO的观察者 由于通知中心是系统的一个单例,你在注册通知的观察者时,实际上是在通知中心注册的, 这时,即使ARC下系统帮我们释放了对象,但是在通知中心的观察还是没有移除,那么当有...,导致控制器的引用计数加1,如果没有将这个NSTimer 销毁,它将一直保留该viewController,无法释放,也就不会调用dealloc方法。...比如viewController中有个block属性,在block中又强引用了self或者其他成员变量,那么这个viewController与自己的block属性就形成循环引用,导致viewController...可是这样,UITableViewCell A中的方法A依然会被执行很多次。 #最后一个参数是表示会对哪个发送者对象发出的事件作出响应,nil 时表示接受所有发送者的事件。

    81420

    深入浅出 RunLoop(四):RunLoop 与线程

    Threading Programming Guide(苹果官方文档) RunLoop对象和线程是一一对应关系; RunLoop保存在一个全局的Dictionary里,线程作为key,RunLoop...未启动 RunLoop 的子线程 创建一个NSThread的子类HTThread并重写了dealloc方法来观察线程的状态。...实现一个常驻线程 好处:经常用到子线程的时候,不用一直创建销毁,提高性能; 条件:该任务需是串行的,而非并发; 步骤: ① 获取/创建当前线程的RunLoop; ② 向该RunLoop中添加一个Source...模式下 换句话说,该方法有效地开启了一个无限的循环,处理来自 RunLoop 的输入源 Sources 和 Timers 的数据 */...: 0x600002b71240>{number = 6, name = (null)} -[ViewController dealloc] -[ViewController stopThread]

    1.7K10

    系统框架--52:NSTimer会保留其目标对象

    Student alloc]init]; [stu start]; } @end 解决这个循环引用的方法 Student不再引用定时器 定时器不再保留目标对象self Student不再引用定时器是不可行的...也就是合适的时候调用end方法。然而,合适的时机很难找到。假如这是一个验证码倒计时程序,你可以在倒计时结束时调用end方法。...但是你不能确定用户一定会等倒计时结束才返回到上一级页面.或许你想在dealloc方法中使定时器失效,那你就太天真了。此时定时器还保留着当前控制器,此方法是不可能调用的,因此会出现内存泄漏。...或许在倒计时程序中,你可以重写返回方法,先调用end再返回,但这不是一个好主意 这里采用block块的方法为NSTimer增加一个分类,具体细节看代码(程序员最好的语言是代码)。...iOS10中,定时器的API新增了block方法,实现原理和这一样,只不过我这里用的是分类,而系统是在原始类中直接添加方法,最终的行为是一致的 #import "Student.h" @implementation

    13110

    iOS学习——内存泄漏检查及原因分析

    项目的代码很多,前两天老大突然跟我说项目中某一个ViewController的dealloc()方法没有被调用,存在内存泄漏问题,需要排查原因,解决内存泄漏问题。...二、内存泄漏的原因分析 在目前主要以ARC进行内存管理的开发模式,导致内存泄漏的根本原因是代码中存在循环引用,从而导致一些内存无法释放,这就会导致dealloc()方法无法被调用。...target:self 就增加了ViewController的return count,如果你不将这个timer invalidate,将别想调用dealloc。...2.2 ViewController中的代理delegate   一个比较隐秘的因素,你去找找与这个类有关的代理,有没有强引用属性?...2.3 ViewController中Block 这个可能就是经常容易犯的一个问题了,Block体内使用实例变量也会造成循环引用,使得拥有这个实例的对象不能释放。

    2.1K70

    iOS对UIViewController生命周期和属性方法的解析

    iOS中的UIViewController是UIKit框架中最基本的一个类。从第一个UI视图到复杂完整项目,都离不开UIViewController作为基础。...3:loadView方法是开始加载视图的起始方法,除非手动调用,否则在ViewController的生命周期中没特殊情况只会被调用一次。...11:dealloc:controller被释放时调用。...我们可以把它连接到viewController2中的一个按钮上: ? 这样,当我们点击viewController2中的按钮时,就会返回到我们第一个ViewController1中了。...,还有一个属性可以设置弹出的controler的填充效果,但是这个属性只在pad上有效,在iphone上无效,都是填充到整个屏幕: @property(nonatomic,assign) UIModalPresentationStyle

    3K20

    object-c编程tips-timer「建议收藏」

    每隔10秒自己主动刷新又一次获取数据,这个时候使用NSTimer是一个非常方便的事情。普通情况下直接创建一个NSTimer的repeat对象,然后实现相应的timerFireMethod方法。...你可能会说在dealloc中调用invalidate,可是必须明确dealloc根本就不会调用,当然viewDidDisappear也一样不会被调用。...它保留的是类对象,因此也就不会有什么问题。 它传入要运行的block, 然后在回调函数中通过userInfo得到block,并运行。 改进: 这个已经是一个非常大的改进了。...我们能够在代码中放心的传入block代码。只是细致思考一下。假设在block中引入了viewController的成员,并且timer又作为成员变量存在于viewController中。...外部的使用者能够将LPTimer看成是一个普通的对象即可,持有它也不会有什么问题。 LPTimer保留一个弱引用指向外部的使用者。在时间到timer触发的时候,会先调到NStimer的block中。

    33910

    关于 循环引用问题

    iOS内存中的分区有:堆、栈、静态区。其中,栈和静态区是操作系统自己管理回收,不会造成循环引用。所以我们只需要关注堆的内存分配,循环引用会导致堆里的内存无法正常回收。...官方文档 block是一个对象,在创建时内存默认分配在栈上,不是堆上,所以它的作用域仅限创建时候的当前上下文(函数, 方法...), 当我们在该作用域外调用该block时, 程序就会崩溃....解决方法(手动释放): [_timer invalidate]; _timer = nil; 注意:有人把销毁_timer的方法放在dealloc里,感觉就是自我安慰,循环引用造成不调用dealloc...三.检测循环引用造成的内存泄漏 我们在编写项目时,并不是所有的循环引用编译器都会提示,所以在做完项目后,我们还需要检测项目中是否有内存泄漏的情况,以下是几种检测方法。...缺点: 静态内存分析由于是编译器根据代码进行的判断, 做出的判断不一定会准确,不能把所有的内存泄露查出来,有的内存泄露是在运行时,用户操作时才产生的。

    3.3K20

    编码篇-ARC下的内存泄漏

    前言 内存泄露是一个相对挺严重的问题,可是它的存在未引起足够的重视,如果程序运行时一直分配内存而不及时释放无用的内存,程序占用的内存越来越大,直到把系统分配给该APP的内存消耗殚尽,程序因无内存可用导致崩溃...当内存快要用完的时候,会非常的卡顿 如果是ViewController没有释放掉,引起的内存泄露,还会引起其他严重的问题,尤其是和通知相关的。...:^(NSInteger cellIndex) { self.allInter = cellIndex; }]; 引用大循环 ​就像前面说的,引用循环可能是一个大循环。...所以单例持有的代码块中要用弱引用,原因是:单例不会被释放掉,它会一直持有block,导致该block所在的ViewController释放不掉。...解决办法是,在ViewController关掉的时候,停止这个animation。

    1.7K20

    ARC 环境下 dealloc 的使用误区

    一.dealloc 的使用 a. 什么情况下会调用呢? 当对象的引用计数为0,系统会自动调用dealloc方法,回收内存。...} b.调用的顺序 一般说调用的顺序是,当子类的对象释放完时,然后再释放父类的所拥有的实例。这一点与调用初始化方法,正好相反。...二.dealloc 误区 我们在开发过程中,用到dealloc,却因不会意识得到对象的引用计数是不是为0,dealloc到底走了没走,因而导致内存暴增,还会遇到很多奇怪的问题。...我们需要知道dealloc不被调用的几种情况?...昨天我遇到一奇葩问题,用得到(NSNotificationCenter)通知,我明明只发送一次通知,却接受到几次通知,ViewController POP返回后,再次push进来,又多收一次通知,意识到可能通知没有移除

    91640

    iOS编码建议

    } - (void)viewWillDisappear:(BOOL)animated {} - (void)viewDidDisappear:(BOOL)animated {} - (void)dealloc...4、类的命名:  ViewController: 使用ViewController做后缀,例子: XXHomeViewController View: 使用View做后缀,例子: XXAlertView...names = @[@"Brian", @"Matt", @"Chris", @"Alex", @"Steve", @"Paul"]; NSDictionary *productManagers = @{@"iPhone...虽然 和 ->是等价的,或者说编译器优化后等价。但是在访问空指针和野指针时有差别——空指针会挂在*解引用,野指针会挂在.访问内存。...MVVM:主要优点数据绑定,做到数据一致性,同时也能做到给Controller瘦身目的,缺点是数据绑定导致数据流向不清晰,难以调试Bug,如果没有详细清晰文档,很可能成为一个天坑(助手里的聊天模块)。

    37310
    领券