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