2011-12-31 41 views
0

我有一個問題,設置一個傳遞的指針爲零。當我通過GDB運行下面的代碼時,我發現傳入的變量「string」在被調用的函數中本地設置爲nil,但在調用的範圍內它仍然指向原始的內存地址。我想解決這個問題,將涉及的參考和值訪問運營商的組合,我只是不夠好,在基本面推測這一個:)Objective-C:設置傳遞指針爲零

#import "AppDelegate.h" 


@interface AppDelegate() 

+(void)releaseAndNullify:(id)input; 

@end 


@implementation AppDelegate 
@synthesize window; 


-(void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
NSString *string = [NSString string]; 
[AppDelegate releaseAndNullify:string]; 
} 


+(void)releaseAndNullify:(id)input 
{ 
if (input) 
{ 
    [input release]; 
    input = nil; 
} 
} 


-(void)dealloc 
{ 
[window release]; 

[super dealloc]; 
} 


@end 
+1

嗨可能這已經被問[這裏](http://stackoverflow.com/questions/6219821/objective-c-method-to -nullify-object)雖然這不是你描述的 – 2011-12-31 14:55:40

+0

謝謝,我沒有看到這個鏈接:) – banDedo 2011-12-31 14:59:39

+0

你到底想要完成什麼? – 2011-12-31 16:40:33

回答

1

這是我從另一篇文章中的修補程序:

#import "AppDelegate.h" 


@interface AppDelegate() 

+(void)releaseAndNullify:(NSString **)input; 

@end 


@implementation AppDelegate 
@synthesize window; 


-(void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
NSString *string = [NSString string]; 
[AppDelegate releaseAndNullify:&string]; 
} 


+(void)releaseAndNullify:(NSString **)input 
{ 
if (!*input) return; 

[*input release]; 
*input = nil; 
} 


-(void)dealloc 
{ 
[window release]; 

[super dealloc]; 
} 


@end 
1

Objective-C的參數是按值傳遞,而不是參考。

+0

所以你說,通過將'string'傳遞給'releaseAndNullify',你基本上已經拷貝了'string'的值,並且將該拷貝取消了嗎? – 2011-12-31 15:03:46

+0

你的回答讓我想起了一篇幫助過的文章。 – banDedo 2011-12-31 15:05:07

+0

@PatrickHogan感謝您將通過再次閱讀,因爲它只是剔除 – 2011-12-31 15:06:49