如果我在这里有这个代码,我会尝试尽可能地解释这个
ViewTwoController *home = [[ViewTwoController alloc] initWithNibName:@"contentscreen" bundle:nil];
[self presentModalViewController:home animated:YES];
[home release];
我将开始一个新的.m和.h课程。然而,我想尝试做的是,在调用它时,使用.m和.h类,在后台运行调用它,这样我就不会丢失数据。
我能想到的最好的例子是Android。如果你开始一个新类,并且没有在调用的类中添加finish()语句,那么前一个类在当前类后面运行(被推到前面)并维护它最初的所有数据,所以如果你点击一个返回按钮,你会看到你刚才收到的信息。这可能吗?如果人们无法理解我想要做什么,我可以尝试添加更多细节。
答案 0 :(得分:1)
你需要更好地理解对象的生命周期。
一个对象通常以2部分进程存在。
这可以与+new
类方法合并为一步,该方法结合了alloc
和init
。
让我们介绍一个名为MyClass
的示例类,以及该类的一个名为myObject
的对象。按照惯例,类以大写字母开头,对象以小写字母开头。所以不用多说,一些代码:
MyClass * myObject;
这会产生一个对象指针,但不会为它分配任何内存或指示指针引用任何内容。
myObject = [[MyClass alloc] init];
这实际上创建了MyClass
的实例,将-init
消息传递给它,然后将init
消息的返回值分配给myObject
。此时此对象的引用计数为1.
myObject
可能会超出范围,但仅此一项不会释放alloc
步骤中分配的内存。
为了释放该内存,需要将释放消息传递给该对象。
[myObject release];
释放的效果是减少引用计数,如果引用计数已经为1,则对象将传递-dealloc
,表示它实际上已被释放。
回到你的问题......基本上[self presentModalViewController:home animated:YES];
最终会在-retain
上调用home
,这样在解除模态视图控制器之前它不会被销毁。在调用release或autorelease时有效,你不会释放对象,只是告诉对象:
“嘿,我不再需要你了,如果没有其他人做,那么就把你早先抓住的所有记忆释放出来。”
答案 1 :(得分:0)
您的问题与“在后台运行的课程”无关,但与您管理数据的方式有关。
答案 2 :(得分:0)
当您呈现模态视图控制器时,其父级(您从中呈现的视图控制器)不会被销毁(除非您专门发布它,否则可能会在以后崩溃您的应用程序)。所以,如果你想知道它是否还在记忆中;它是。至于仍在运行的任务,它取决于这些任务是什么。例如,您仍然可以向其发送消息(调用方法),并且很乐意从您或代理处接收这些消息,并在屏幕外执行任何操作。
希望有所帮助。
答案 3 :(得分:0)
在这种情况下,您将呈现新的视图控制器。主线程将在新控制器中呈现。如果您希望在上一个视图控制器中在后台运行某些内容,则可以创建后台线程。这可以使用[self perfomselectorInThebackground ...]或其他一些方法来完成,比如GCD。 (主要的是你不应该阻止主线程)