Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 理解基本的objC事物_Objective C - Fatal编程技术网

Objective c 理解基本的objC事物

Objective c 理解基本的objC事物,objective-c,Objective C,我在努力理解一些事情。 在A类中,我创建了一个B类的实例,在B类中,有一个计时器,总是重复,他永远启动一个录音和播放系统 在类A中,我使用以下命令创建B的实例: recordMachine *recMinst=[[recordMachine alloc]init]; [recMinst startMachine]; [recMinst release]; 问题是,在classB中,接口中有实例变量,比如播放器、记录器指针和其他整数 问题是,在我在A中发布实例之后,这个classB如何继续工作?

我在努力理解一些事情。 在A类中,我创建了一个B类的实例,在B类中,有一个计时器,总是重复,他永远启动一个录音和播放系统

在类A中,我使用以下命令创建B的实例:

recordMachine *recMinst=[[recordMachine alloc]init];
[recMinst startMachine];
[recMinst release];
问题是,在classB中,接口中有实例变量,比如播放器、记录器指针和其他整数

问题是,在我在A中发布实例之后,这个classB如何继续工作??
A是否在内存中创建一个位置来存储所有B实例变量?当我释放它时,它们会消失?

如果需要将B实例保留到其结束,则必须将其保留在对象中,直到A实例结束。 在您的情况下,释放B后,B的保留计数为0,因此它被释放

如果你想保留它,你必须把它保留在某个地方。我建议您保留它,并以

A不在内存中创建一个存储所有B实例的位置吗 变量,当我释放它时,它们会消失吗

是和否,发布不象C++删除一样工作,例如,它不删除对象并清除它的内存,而只减少其引用计数。如果另一个对象抓住了它,那么它不会被释放,直到另一个对象也对它调用了release

问题是,在我发布 实例在一个

关于B为什么继续工作的唯一解释是因为其他物体抓住了它

您提到类B使用一个计时器(很可能是一个NSTimer),您应该将B实例传递给它。因此,NSTimer保留了对B对象的引用,并防止它被破坏

检查实例上的ref计数以确保


表示“目标对象由计时器保留,并在计时器无效时释放。”

如果您没有在
-dealoc
中手动释放B的IVAR,它们仍在内存中

我不明白你的意思,我想这不是我要问的。我的问题是,我是如何发布B实例的,并且它仍然可以继续工作的?发布后,它的所有实例都消失了吗?好的,对不起。如果B仍在工作,则有人正在保留它或它是在自动释放中创建的,因此它将在激活自动释放池的位置释放。如果您想尝试,请从模式中启用NSZombie,并在发布后检查您的B变量是否为Zombie。我怎么能确定?如果你使用ARC,编译器会在[recMachine release]上抱怨。所以,如果它构建了,你就不用ArcThank了。我想这就是问题所在。那么这个类中任何有计时器的东西,都是保留直到验证?那么,当我发布一条消息时,它是无用的吗?我不必释放它?文档说时间会一直保持对象直到它失效,所以你需要做的就是在析构函数方法中使时间失效。因此,调用[myTime invalidate],您的B将被销毁。我会这样做。但在一个“我仍然有分配的对象而没有释放”中,您仍然需要在一次完成后释放您的对象。如果这仍然没有破坏对象B,那么你有一些其他对象支撑着它。在这种情况下,请使用Instruments的Zombies模板来了解发生了什么。好的,很好,谢谢。所以我可以理解,我必须在A中破坏它,因为即使B中的计时器破坏了它,A仍然持有它,并且必须释放它?