NSString вне области в методе init - PullRequest
0 голосов
/ 26 марта 2011

У меня есть класс, который имеет строку NSString.

@interface AudioManager : NSObject {
    AudioData *data_;
    NSString *requiredMusic_;
    NSTimer *timer_;
    MUSIC_ID musicId_;
    float fadeIncrement_;
}

Когда я смотрю на переменную requiredMusic_ через отладчик в методе init, записывается, что NSCFString ... out of scope.Но если я посмотрю на эту переменную из self, то будет написано, что это ноль!

-(id) init
{
    self = [super init];
    if (self)
    {
        data_ = &[[GameDataObject sharedObject] data]->audioData();
        requiredMusic_ = @"bla bla bla";
        musicId_ = MUSIC_OTHER;
    }
    return self;
}

Out of scope также написано в других местах, и мой код не работает должным образом.В чем проблема?

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

В приведенном выше коде это также выходит за рамки.

Ответы [ 2 ]

1 голос
/ 26 марта 2011

Возможно, вы отлаживаете версию вашей программы, скомпилированную с включенной оптимизацией. В оптимизированном коде некоторые переменные могут быть недоступны через отладчик, потому что при компиляции компилятор обнаружил, что в этой текущей функции область действия переменной может быть уменьшена без изменения семантики, и это было сделано для улучшения кода (уменьшения использования регистра или памяти). доступ, ...).

Вы можете попробовать перекомпилировать его с отключенной оптимизацией. В зависимости от компилятора можно отключить оптимизацию только для части файла с некоторым значением #pragma (для GCC это было введено в версии 4.4).

0 голосов
/ 26 марта 2011

Что сказала Сильвен. Но ...

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

Не делай этого! Вы будете принимать адрес возвращаемого значения, которое почти наверняка не будет тем, что вы хотите, и я удивлен, что компилятор даже компилирует это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...