在iOS类中一致调用的最后一个方法?

时间:2012-06-18 11:24:08

标签: ios objective-c

在iOS类中不会显示为视图,例如

@interface MyDataClass : NSObject{}

是否有一种方法可以被覆盖,并且在类的末尾始终被调用。执行/生命周期类似于viewDidUnloaddealloc,可以安全地调用方法吗?

或者如何实现一种能够识别这类课程有用寿命完成的方法呢?

5 个答案:

答案 0 :(得分:3)

我相信dealloc是从内存中释放NSObject子类时调用的最后一个方法。

- (void)dealloc
{
    [super dealloc];
}

答案 1 :(得分:2)

喜欢

- (void)dealloc
{
    [super dealloc];
}

答案 2 :(得分:1)

如果你的意思是一个在 Class 的生命周期结束时运行的方法(不是一个实例),我想知道当你完成一个类的运行时,运行时应该怎么知道(您可以随时创建新实例)?有+initialize方法,但从技术上讲,类本身永远可用(直到程序退出)。

如果您的意思是实例的生命周期,那么您要查找的方法是-dealloc

只要对象的内部引用计数达到零,就会调用

-dealloc。在非ARC代码中,如果覆盖它,则必须调用超类的实现,以便最终调用NSObject的{​​{1}},即释放内存时。

编辑:关于内存不足的情况,这是您注册通知的方式:

-dealloc

在dealloc里面,你必须这样做:

// Somewhere inside the -init method of your class
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(myMethod:) 
                                             name:UIApplicationDidReceiveMemoryWarningNotification 
                                           object:nil];

...否则,您的应用可能会崩溃。

当然,您必须实现一个具有以下签名的方法,该签名将在内存不足的情况下调用:

[[NSNotificationCenter defaultCenter] removeObserver:self];

(否则,您的应用会崩溃)

答案 3 :(得分:1)

让我们想象一下,除了dealloc之外,你想要一个不同的方法,在低内存条件下调用(而不是在对象被释放时)。哪个对象会调用该方法?

viewDidUnload是UI Framework的一部分,它由它调用。当应用程序收到有关内存不足情况的消息时,框架会将消息重定向到所有活动视图控制器。

您可以通过在自定义类上创建方法来实现相同的功能,例如: -(void)onLowMemory然后通过applicationDidReceiveMemoryWarning方法从您的应用程序委托中调用它,或者您可以注册该类以收听UIApplicationDidReceiveMemoryWarningNotification

答案 4 :(得分:0)

这个stackoverflow link或多或少回答了我的问题,但并非完全如此。我认为我的问题更多地与架构或方法采购和程序有关,而不是可以简单回答的问题。