众所周知,iOS开发的时候,使用ARC的话,dealloc函数是不需要实现的,写了反而会出错。
但有些特殊的情况,dealloc函数还是需要的。
比如,在画面关闭的时候,需要把ViewController的某些资源释放,
在viewDidDissppear不一定合适,viewDidUnload一般情况下只在memory warning的时候才被调用。
不用ARC的情况下,我们自然会想到dealloc函数。
其实ARC环境下,也没有把dealloc函数禁掉,还是可以使用的。只不过不需要调用[supper dealloc]了。
举个例子,画面上有UIWebView,它的delegate是该画面的ViewController,在WebView载入完成后,需要做某些事情,比如,把indicator停掉之类的。
如果在WebView载入完成之前关闭画面的话,画面关闭后,ViewController也释放了。但由于WebView正在载入页面,而不会马上被释放,等到页面载入完毕后,回调delegate(ViewController)中的方法,由于此时ViewController已经被释放,所以会出错。(message sent to deallocated instance)
解决办法是在dealloc中把WebView的delegate释放。
-(void)dealloc {
self.webView.delegate = nil;
}
相关推荐
本篇将详细介绍如何在iOS 9环境下,根据项目是否使用ARC来创建和使用单例。 首先,我们了解什么是ARC和非ARC。ARC是Apple引入的一种内存管理机制,自动管理对象的生命周期,避免了手动引用计数的繁琐。而非ARC的...
1. **学习成本**:虽然大部分情况下ARC能自动管理内存,但理解其工作原理和限制仍然重要,比如了解哪些关键字和特性在ARC中如何工作。 2. **与旧代码兼容**:升级到使用ARC的项目可能需要修改或配置旧代码,以避免...
- **Autorelease和AutoreleasePool**:虽然在ARC环境下大多数情况下编译器会自动管理`AutoreleasePool`,但在某些特定场景下可能仍需要手动创建`AutoreleasePool`来优化内存使用。 #### 结论 - ARC是iOS 5引入的一...
- ARC环境下`dealloc`方法的实现细节及其重要性。 8. **AutoreleasePool** - ARC如何管理和优化`@autoreleasepool`块内的内存释放。 9. **Toll-Free Bridging** - ARC环境下的桥接机制,如何在Objective-C和C/...
虽然ARC是在iOS5中引入的,但在某些情况下,开发者可能希望在较旧版本的iOS上使用ARC。这需要开发者在编译时指定兼容性标志,并确保所有使用的框架都支持ARC。 #### ARC高级指南 除了基本的内存管理外,ARC还提供...
在iOS开发中,自动引用计数(Automatic Reference Counting, 简称ARC)是苹果引入的一项内存管理技术,它极大地简化了内存管理,但了解非ARC环境下的编程仍然是至关重要的,特别是在处理一些特定情况或者需要更精细...
- **dealloc方法**: 在ARC环境中,`dealloc`方法的调用仍然是必要的,尽管ARC负责了大部分内存管理工作,但有时仍需在`dealloc`方法中执行一些清理操作。 - **AutoreleasePool**: ARC也支持自动释放池,它可以用来...
SingletonTemplate工程可能包含多个文件,每个文件分别演示了ARC和非ARC环境下的单例实现,以及如何在不同场景下使用宏定义来切换这两种模式。通过学习这个工程,开发者可以更好地理解和掌握在实际项目中如何适当地...
**自动引用计数(Automatic Reference Counting,简称ARC)是iOS和macOS开发中的一个关键技术,它极大地简化了内存管理。在本篇博客Demo源码中,我们将深入探究ARC是如何帮助开发者自动处理对象的生命周期,确保内存...
在ARC环境下,尽管编译器会自动管理引用计数,但如果存在强引用循环(比如两个对象相互引用且没有外部弱引用打破循环),那么仍然可能导致内存泄露。因此,开发者需要对这种循环引用保持警惕,并使用weak或unsafe_...
在iOS中,自动引用计数(ARC,Automatic Reference Counting)是一种自动管理对象生命周期的机制,它负责跟踪和释放不再使用的对象。然而,尽管ARC极大地简化了内存管理,但仍然可能存在内存泄漏,尤其是由于循环...
内存管理方面,Objective-C使用alloc/new/copy/mutableCopy、retain、release、autorelease、dealloc等方法进行对象的内存管理。Swift则利用ARC来简化内存管理过程。 数据库知识在很多应用中都需要用到,因此需要...
在非ARC环境下,开发者需要手动管理内存,包括编写retain和dealloc方法来防止内存泄漏,并且确保不会有多个实例被创建。 随着编程语言和开发环境的发展,ARC的出现简化了内存管理的复杂度。在ARC环境下,对象的内存...
在非自动引用计数(ARC)环境下,开发者需要明确地管理对象的内存,包括创建、保持(retain)、释放(release)和销毁(dealloc)。 现在,我们来详细分析assign、retain和copy三个关键字: 一、assign assign用于...
在ARC环境下,根据对象的生命周期选择strong(默认)或weak属性。一般情况下,按钮应使用strong属性,因为它们的生命周期通常与视图控制器相同。 2. 尽量使用IBOutlet:在Storyboard或XIB中,通过IBOutlet连接ivar...
相反,在ARC环境下,如果需要使用非ARC的方式编译某些类,可以使用-fno-objc-arc标志。 总之,对iOS开发面试的准备,不仅要求掌握技术要点,还要理解这些知识点背后的设计理念和应用场景。面试者需要将这些知识内化...
- `strong`:表示强引用,ARC环境下相当于`retain`。当对象的最后一个强引用消失时,该对象会被销毁。 - `weak`:表示弱引用,ARC环境下相当于`assign`。当被弱引用的对象被释放时,弱引用会被置为`nil`。 - `...
- `strong`(ARC下默认):与`retain`类似,但在ARC环境中使用。 - `weak`(ARC下):弱引用,不增加对象的引用计数,当对象被释放时自动设为nil,防止野指针。 关于类变量的访问控制修饰符: - `@private`:仅在类...
- `ARC` 环境下内存管理的行为。 #### 栈内存与堆内存 1. **栈 (Stack) 与堆 (Heap) 区别** - 栈内存的特点及使用场景。 - 堆内存的特点及使用场景。 #### 深拷贝与浅拷贝 1. **深拷贝 (Deep Copy) 与浅拷贝 ...