Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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 NSString在init方法中超出范围_Objective C_Nsstring - Fatal编程技术网

Objective c NSString在init方法中超出范围

Objective c NSString在init方法中超出范围,objective-c,nsstring,Objective C,Nsstring,我有一个类,它有一个字符串 @interface AudioManager : NSObject { AudioData *data_; NSString *requiredMusic_; NSTimer *timer_; MUSIC_ID musicId_; float fadeIncrement_; } 当我在init方法中通过调试器查看requiredMusic变量时,NSCFString。。。超出范围。但是如果我从self看这个变量,那么它将被写

我有一个类,它有一个字符串

@interface AudioManager : NSObject {
    AudioData *data_;
    NSString *requiredMusic_;
    NSTimer *timer_;
    MUSIC_ID musicId_;
    float fadeIncrement_;
}
当我在
init
方法中通过调试器查看
requiredMusic
变量时,
NSCFString。。。超出范围
。但是如果我从
self
看这个变量,那么它将被写为nil

-(id) init
{
    self = [super init];
    if (self)
    {
        data_ = &[[GameDataObject sharedObject] data]->audioData();
        requiredMusic_ = @"bla bla bla";
        musicId_ = MUSIC_OTHER;
    }
    return self;
}
超出范围
也在其他地方编写,我的代码无法按预期工作。有什么问题

-(void) changeBackgroundMusic:(NSString *)path
{
    [requiredMusic_ release];
    requiredMusic_ = path;
    [requiredMusic_ retain];
...
}

在上面的代码中,它也超出了范围。

您可能正在调试在启用优化的情况下编译的程序版本。在优化代码中,某些变量可能无法通过调试器访问,因为在编译编译器时发现,在当前函数中,变量范围可以在不更改语义的情况下缩小,并且这样做只是为了改进代码(减少寄存器使用或内存访问…)


您可以尝试在禁用优化的情况下重新编译它。根据编译器的不同,可以仅对带有一些
#pragma
的文件的一部分禁用优化(对于GCC,这是在4.4版中引入的)。

Sylvain说的话。但是

    data_ = &[[GameDataObject sharedObject] data]->audioData();

不要那样做!您将获取一个返回值的地址,这个地址几乎可以保证根本不是您想要的,我很惊讶编译器甚至编译了这个地址。

这里一切正常。AudioData()正在返回引用。所以我要取一个实变量的地址。没有复印件。const AudioData&AudioData()const{return audio}这仍然是一个非常奇怪的设计。也很脆弱。您实际上是在剥离几层封装。如果你真的想要一个变量的地址,你应该有API直接返回这个地址,而不依赖于在调用者中获取它。这样就不那么脆弱了(没有看到更多的代码,很难说更多)。这是我正在做的代码的唯一部分。只需保留一个指向变量的指针即可直接访问。在C++中,我会对这个变量做一个常数引用,并在构造函数中初始化它。但我不能在objective-c中这样做。我如何禁用优化?