[英]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.