繁体   English   中英

Objective-c 指针

[英]Objective-c pointers

我不知道如何删除指针但不是 object,例如:我有一些 class:

@interface model : NSObject {
NSMutableArray *tab;
}

当我这样做时:

model1 = [[model alloc]init];
NSMutableArray * tab2 = [model1 tab];
...
some operations
...

我只想删除指向我的选项卡 *tab2 的指针,但是当我释放 tab2 时,选项卡也在释放。 在 c++ 中,当我清除时,我这样做:

int a =10;
*w = &a;

当我删除指针时

delete w;

变量 a 仍在 memory 中,没关系。 我应该在 obj-c 中做什么来只删除一个指针?

在您使用 Objective-C 的情况下,没有理由删除指针。 让它从 scope 中掉出来。 你没有分配任何新的对象。 您没有制作标签的副本。 你没有保留它。 您只是在创建另一个指向原始选项卡 object 的指针。 如果你愿意,你可以设置tab2 = nil但不管怎样都无所谓。

在您的第二个 C++ 示例中,我不确定,但您可能会陷入未定义的行为,因为您提供的代码示例实际上适用于您测试的编译器! 删除不是用new创建的指针是无效的 C++ 。

tab2 = 无; 不需要任何形式的释放或删除。 请参阅 iOS 文档中的基本 memory 管理。 当您使用 new、alloc、retain 或 copy 时,您只需要担心对象和释放它们。

在 objective-c 中,如果不调用 alloc、copy、new 或保留 object,则不需要释放它。 如果您想创建一个可以摆脱的指针,那么您可能需要制作 object 的副本。

NSMutableArray * tab2 = [model1 tab] copy];

或者

NSMutableArray *tab2 = [model1 tab] mutableCopy];

然后你可以在完成后释放 tab2 并且 tab1 仍然存在。

希望这是有道理的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM