在不会显示为视图的 iOS 类中,例如
@interface MyDataClass : NSObject{}
是否有一种可以被覆盖并在类的执行/生命周期结束时始终如一地调用的方法,类似于viewDidUnload
or dealloc
,可以安全地调用方法?
或者,人们将如何实现一种可以识别此类的有用生命周期完成的方法?
在不会显示为视图的 iOS 类中,例如
@interface MyDataClass : NSObject{}
是否有一种可以被覆盖并在类的执行/生命周期结束时始终如一地调用的方法,类似于viewDidUnload
or dealloc
,可以安全地调用方法?
或者,人们将如何实现一种可以识别此类的有用生命周期完成的方法?
如果从内存中释放 NSObject 子类,我相信 dealloc 是最后一个被调用的方法。
- (void)dealloc
{
[super dealloc];
}
像
- (void)dealloc
{
[super dealloc];
}
?
如果您的意思是在整个类的生命周期结束时运行的方法(不是实例),我想知道运行时应该如何知道您何时使用完一个类(您可以随时创建新实例) ? 有一种+initialize
方法,但从技术上讲,该类本身永远可用(直到程序退出)。
如果您指的是实例的生命周期,那么您正在寻找的方法是-dealloc
.
只要对象的内部引用计数达到零,就会调用 -dealloc。在非 ARC 代码中,如果您覆盖它,则必须调用超类的实现,以便最终调用NSObject
's -dealloc
,这就是释放内存的时候。
编辑:关于内存不足的情况,这是您注册通知的方式:
// Somewhere inside the -init method of your class
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMethod:)
name:UIApplicationDidReceiveMemoryWarningNotification
object:nil];
在 dealloc 中,你必须这样做:
[[NSNotificationCenter defaultCenter] removeObserver:self];
...否则,您的应用程序可能会崩溃。
当然,您必须实现一个具有以下签名的方法,该方法将在内存不足的情况下被调用:
- (void) myMethod:(NSNotification*) notification
{
// Do some cleanup here, perhaps.
}
(否则,您的应用会崩溃)
让我们假设您想要有一个不同的方法,除了dealloc
在内存不足的情况下调用(而不是在对象被释放时)。哪个对象会调用该方法?
viewDidUnload
是 UI 框架的一部分,由它调用。当应用程序收到有关内存不足的消息时,框架只是将消息重定向到所有活动的视图控制器。
您可以通过在您的自定义类上创建一个方法来实现相同的功能,例如-(void)onLowMemory
,然后从您的应用程序委托从applicationDidReceiveMemoryWarning
方法中调用它,或者您可以注册要监听的类UIApplicationDidReceiveMemoryWarningNotification
。
这个stackoverflow链接或多或少地回答了我的问题,但不完全。我认为我的问题更多地与架构或方法采购和程序有关,而不是可以简单回答的问题。