V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
WarWithinMe
V2EX  ›  iDev

如何监听某个object被析构了?

  •  
  •   WarWithinMe ·
    WarWithinMe · 2011-12-07 21:33:05 +08:00 · 5076 次点击
    这是一个创建于 4734 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有没有办法知道一个object被析构了呢?
    比如说在GC下,我希望在某个不是我管理的object的finalize被调用前,调用一下我自己的代码。
    或者非GC下,就在dealloc之前调用我自己的代码。

    具体应用环境:我利用associative reference把objectB关联到objectA上面,然后希望objectA在被析构的时候,也把objectB释放掉。。

    虽然可以用些hacky技巧。但是想知道有没有比较正常的方法。
    7 条回复    1970-01-01 08:00:00 +08:00
    lldong
        1
    lldong  
       2011-12-07 21:50:14 +08:00
    通过method swizzling把dealloc方法替换是一种方法。
    WarWithinMe
        2
    WarWithinMe  
    OP
       2011-12-07 21:55:08 +08:00
    @lldong 我目前就想到这个方法,有点hack的感觉。看来好像没有比较普通的途径。。。
    fly2never
        3
    fly2never  
       2011-12-17 13:08:57 +08:00
    用Notifications或者kvo检测行不行?或许是一个方法
    WarWithinMe
        4
    WarWithinMe  
    OP
       2011-12-17 13:23:44 +08:00
    @fly2never dealloc或者finalize的时候,应该不会发送notification吧。。。
    而对于KVO,则有两个疑问,1.非GC情况下,retainCount应该是不可以被observe的。。2.GC情况下,一个weak引用如果在引用的对象被回收的时候,自动变成nil的话,这个倒可以observe。
    elden
        5
    elden  
       2011-12-17 14:24:22 +08:00
    把policy设为OBJC_ASSOCIATION_RETAIN(objectB会被objectA retain),然后release objectB,当后面objectA dealloc的时候是会把objectA也release。
    elden
        6
    elden  
       2011-12-17 14:25:28 +08:00
    上面打错。

    把policy设为OBJC_ASSOCIATION_RETAIN(objectB会被objectA retain),然后release objectB,当后面objectA dealloc的时候是会把objectB也release。
    WarWithinMe
        7
    WarWithinMe  
    OP
       2011-12-17 14:33:52 +08:00
    @elden 原来这样啊。。受教了。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2849 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 03:57 · PVG 11:57 · LAX 19:57 · JFK 22:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.