`

ARC下KVO注意事项

    博客分类:
  • iOS
 
阅读更多
假设我们对A ViewController(暂时叫AVC)进行的一个属性P进行KVO.那么在AVCdealloc的时候,removeKVO,是没有问题的.
但是,如果我们对AVC中的一个组件B的属性进行KVO,在  AVC dealloc的时候去remove KVO,就有一定概率crash,crash信息就是KVO没有被移除,对象B却已经释放了.

在MRC的时候,我们可以这样写AVC的dealloc:
- (void)dealloc
{
    //remove KVO here
    //release B here
    [super dealloc];
}

我们手动管理B的释放,因此我们可以保证KVO的remove在B的release之前.这样完全不会有任何隐患.
但是ARC以后,我们不能手动控制B的release了,AVC的代码如下:

- (void)dealloc
{
    //remove KVO here
}


我们能做的事只有remove KVO.但是AVC的B组件的dealloc时机是不确定,有可能在执行到remove之前,B已经释放了.就会造成crash.

解决办法1:重写B组件的dealloc方法,保证KVO的移除在B的释放之前.
解决办法2:在AVC的appear和disappear方法里,加上KVO的监听和移除逻辑.
1
3
分享到:
评论

相关推荐

    获取类的私有属性(KVO)

    ### 注意事项 - KVO只适用于遵循`NSKeyValueObservingProtocol`的对象,大多数Foundation和AppKit框架的对象都支持。 - 对于私有属性,KVO可能会导致代码可读性和可维护性降低,因此使用时需谨慎。 - 不推荐对`ivar...

    iphone开发比较实用,object-c注意事项,能提高不少

    以下是一些关于Objective-C的实用知识点和注意事项,它们可以帮助你提升开发效率和代码质量。 1. **消息传递机制**:Objective-C的核心是消息传递,它通过“发送消息”给对象来执行操作。了解`-[receiver message]`...

    DGKVOBlocks:KVO 和块正确完成

    ### 注意事项 尽管DGKVOBlocks简化了KVO,但依然需要注意以下几点: - **避免循环引用**:Block会捕获其作用域内的对象,可能导致循环引用。确保正确管理Block的生命周期,必要时使用`weakSelf`或`weakRef`来避免...

    iOS-面试宝典3.0.pdf

    - **注意事项**:使用GCD时需要注意不要创建过多的线程,避免消耗过多系统资源。使用block时需要注意避免循环引用问题。 - **Block与GCD的关系**:Block可以作为GCD函数的参数,用于指定任务执行后的回调操作。 - **...

    史上最全的iOS面试题及答案 - 张明炜 - ITeye技术网站1

    6. **Block注意事项**: - 使用`__block`修饰变量可以在Block内部修改其值,但可能导致循环引用,需要使用`__weak`来避免。 7. **单例模式**: - 单例是一种设计模式,确保类只有一个实例,并提供全局访问点。在...

    ios代码规范_方法注释

    4. **注意事项**:如果方法有特殊行为或限制,应在注释中明确指出。 5. **示例**:提供使用方法的示例代码,帮助理解方法的用法。 综上所述,iOS代码规范和方法注释对于开发高质量的iOS应用至关重要。它们不仅提高...

    Effective Objective-C(原版)

    书中将详细介绍类别使用时的注意事项和潜在问题,以及如何通过类别增强既有类的功能。 4. **块(Blocks)**:Objective-C的块是一种闭包,可以在代码中捕获局部变量。书中会讲解如何创建、使用和存储块,以及它们在...

    iOS面试题一

    - NSNotifications与KVO(Key-Value Observing)的内存管理注意事项。 4. **数据持久化**: - UserDefaults适合存储少量轻量级数据。 - CoreData用于复杂对象的持久化管理。 - SQLite数据库操作,如SQL语句编写...

    史上最全的iOS面试题及答案

    - **注意事项**:避免循环引用,使用`__block`或`__weak`关键字;注意内存管理,不要造成内存泄漏。 - **Block与代理、通知的区别**: - **代理**主要用于类之间的解耦通信,定义一组协议来指定类的行为。 - **...

    30道iOS底层面试题

    17. **Swift与Objective-C的互操作性**:理解桥接头文件,以及在Objective-C项目中使用Swift代码的注意事项。 18. **App的生命周期**:理解不同状态下的生命周期方法,如App进入后台、恢复前台、终止等状态的处理。...

    多线程短发

    使用GCD与block时的注意事项 - **Block的内存管理**:在使用block时需要注意内存管理问题,特别是避免循环引用的情况发生。 - **非ARC环境下的block使用**:在非ARC环境中(即MRC环境下),需要显式声明`__block`...

    iOS KVC设计模式

    **四、KVC的局限性与注意事项** 1. **性能影响**:虽然KVC提供了便利,但相比直接访问属性,其性能稍有下降,因此在性能敏感的代码段中应谨慎使用。 2. **类型安全**:KVC不提供静态类型检查,可能导致运行时错误...

    iOS 4 Programming Cookbook

    - 初始化过程中的注意事项。 - **重要性**:正确的内存管理能够提高应用性能并减少崩溃风险。 5. **1.3 Defining Two or More Methods with the Same Name in an Object(在对象中定义两个或多个同名方法)** - ...

    ios面试总结

    - **注意事项**: 在使用 ARC 时通常不需要手动调用。 **3. AutoreleasePool** - **作用**: 延迟释放对象,直到当前的 autorelease pool 被释放。 - **使用场景**: 在循环或批量操作中,减少内存峰值。 **4. ...

Global site tag (gtag.js) - Google Analytics