1

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

@interface MyDataClass : NSObject{}

是否有一种可以被覆盖并在类的执行/生命周期结束时始终如一地调用的方法,类似于viewDidUnloador dealloc,可以安全地调用方法?

或者,人们将如何实现一种可以识别此类的有用生命周期完成的方法?

4

5 回答 5

3

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

- (void)dealloc
{
    [super dealloc];
}
于 2012-06-18T11:27:23.700 回答
2

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

?

于 2012-06-18T11:27:25.087 回答
1

如果您的意思是在整个类的生命周期结束时运行的方法(不是实例),我想知道运行时应该如何知道您何时使用完一个类(您可以随时创建新实例) ? 有一种+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.
}

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

于 2012-06-18T11:29:54.487 回答
1

让我们假设您想要有一个不同的方法,除了dealloc在内存不足的情况下调用(而不是在对象被释放时)。哪个对象会调用该方法?

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

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

于 2012-06-18T12:31:55.293 回答
0

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

于 2012-06-18T13:12:40.733 回答