首页   注册   登录
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/
iOS 开发实用书单
iPhone App Development: The Missing Manual
Cocoa and Objective-C: Up and Running
Cocoa Programming for Mac OS X
深入浅出设计模式 Head First Design Patterns
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
V2EX  ›  iDev

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

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

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

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

    把policy设为OBJC_ASSOCIATION_RETAIN(objectB会被objectA retain),然后release objectB,当后面objectA dealloc的时候是会把objectB也release。
        7
    WarWithinMe   2011-12-17 14:33:52 +08:00
    @elden 原来这样啊。。受教了。。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3915 人在线   最高记录 4236   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 17ms · UTC 05:56 · PVG 13:56 · LAX 21:56 · JFK 00:56
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1