【问题标题】:Objective-c pointersObjective-c 指针
【发布时间】:2011-09-26 07:17:53
【问题描述】:

我不知道如何删除指针而不是对象,例如: 我有一些课:

@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 仍在内存中,没关系。在obj-c中我应该怎么做才能只删除一个指针?

【问题讨论】:

标签: iphone objective-c pointers release


【解决方案1】:

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

【讨论】:

  • 我应该总是做 tab2 = nil 吗?还是我不能用 tab2 做任何事情并且会没事?
【解决方案2】:

在您使用 Objective-C 的情况下,没有理由删除指针。只是让它超出范围。你没有分配任何新的对象。您没有制作标签的副本。你没有保留它。您只是在创建另一个指向原始选项卡对象的指针。如果你愿意,你可以设置tab2 = nil,但这并不重要。

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

【讨论】:

  • +1 我也注意到了 C++ 代码的问题,并希望有人能提出这个问题,而无需我写一个答案然后解释 C++ 实现的问题。
【解决方案3】:

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

NSMutableArray * tab2 = [model1 tab] copy];

NSMutableArray *tab2 = [model1 tab] mutableCopy];

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

希望这是有道理的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多