Objective c 目标C:将传递的指针设置为零
我在将传递的指针设置为nil时遇到问题。当我通过GDB运行下面的代码时,我看到传递的变量“string”在被调用的函数中被本地设置为nil,但在调用它的范围内,它仍然指向原始内存地址。我认为这个问题的解决方案将涉及一组引用运算符和解引用运算符,我只是在基础知识方面做得不够好,无法解决这个问题:)Objective c 目标C:将传递的指针设置为零,objective-c,null,Objective C,Null,我在将传递的指针设置为nil时遇到问题。当我通过GDB运行下面的代码时,我看到传递的变量“string”在被调用的函数中被本地设置为nil,但在调用它的范围内,它仍然指向原始内存地址。我认为这个问题的解决方案将涉及一组引用运算符和解引用运算符,我只是在基础知识方面做得不够好,无法解决这个问题:) Objective-C参数是通过值传递的,而不是通过引用传递的。以下是我在另一篇文章中找到的修复方法: #import "AppDelegate.h" @interface AppDelegate(
Objective-C参数是通过值传递的,而不是通过引用传递的。以下是我在另一篇文章中找到的修复方法:
#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
嗨,可能已经有人问过了,虽然不是你所说的,谢谢,我以前没有看到过这个链接:)你到底想做什么?你说通过将
string
传递给release和nullify
你实际上复制了string
的值,并将该副本作废了?你的回答让我看到了一篇有帮助的帖子。@PatrickHogan Thank会像刚才一样再次阅读skimmedIt参数是按值传递的,这是真的,但有点混乱,因为我们使用指针,即引用来引用对象。@TomIngram--我是说指针已被复制,因此修改它不会修改调用者中的指针。理解指向某物的指针和某物本身之间的区别很重要。
#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