Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:将传递的指针设置为零_Objective C_Null - Fatal编程技术网

Objective c 目标C:将传递的指针设置为零

Objective c 目标C:将传递的指针设置为零,objective-c,null,Objective C,Null,我在将传递的指针设置为nil时遇到问题。当我通过GDB运行下面的代码时,我看到传递的变量“string”在被调用的函数中被本地设置为nil,但在调用它的范围内,它仍然指向原始内存地址。我认为这个问题的解决方案将涉及一组引用运算符和解引用运算符,我只是在基础知识方面做得不够好,无法解决这个问题:) Objective-C参数是通过值传递的,而不是通过引用传递的。以下是我在另一篇文章中找到的修复方法: #import "AppDelegate.h" @interface AppDelegate(

我在将传递的指针设置为nil时遇到问题。当我通过GDB运行下面的代码时,我看到传递的变量“string”在被调用的函数中被本地设置为nil,但在调用它的范围内,它仍然指向原始内存地址。我认为这个问题的解决方案将涉及一组引用运算符和解引用运算符,我只是在基础知识方面做得不够好,无法解决这个问题:)


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