簡體   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