2

編集- タイプミスをお詫びします。急いでいたので、建物から出なければなりませんでしたが、うーん...質問してもいいですか、なぜ反対票を投じたのですか? いくつかの構文エラーのためだけですか?私は批判されることを受け入れますが、建設的にお願いします。

建設的な回答をありがとう、私は両方に賛成票を投じました。

=============================================

このクラス全体で使用したい iVar BOOL があります。に初期化しようとしましYESたが、最初に読み取ったときはNOです。何故ですか?int私のすべてが保持されているため、これは私にとって奇妙です。

私の.mmファイルには次のようなものがあります:

@interface MyClass : NSObject {
    BOOL myBool;
    int myInt;
}

@end

@implementation MyClass

-(id)init{
    //...
    myInt = 3;
    myBool = YES; //here i set it
    //...
    [self addObjectsToGame];
    //...
}

-(void)addObjectsToGame{
    //...
    assert(myInt == 3);
    assert(myBool);    // <---- this line would fail
    //...
}

@end

assign で @property を使用できることはわかりましたが、なぜこの iVar はその値を保持しないのでしょうか??

編集

わかりました、うわー、ここで何かが本当にめちゃくちゃです...私はそれを置き換えようとしましたが@property、まだ機能していません. 次に、変数の「プロジェクト内のすべてを検索」しようとしましたが、myBool他の場所では変更していません

注:私はcocos2dを使用していますが、それが何かに影響を与えるとは思いません

4

3 に答える 3

2

Objective-C の構文を修正しました。すべてが期待どおりに動作します

#import <Foundation/Foundation.h>

@interface MyClass : NSObject {
    BOOL myBool;
    int myInt;
}
-(void)addObjectsToGame;
@end

@implementation MyClass

-(id)init{
    if (self = [super init])
    {
        myInt = 3;
        myBool = YES; //here i set it
        [self addObjectsToGame];
    }
    return self;
}

-(void)addObjectsToGame{
    assert(myInt == 3);
    assert(myBool);
    NSLog(@"OK");
}

@end


int main(int argc, char *argv[]) {
    @autoreleasepool {
        [MyClass new];
    }
}
于 2012-11-21T03:39:48.807 に答える
1

この iVar、それを台無しにするために他に何もしない限り、その値を保持します。

#import <Foundation/Foundation.h>

@interface MyClass : NSObject {
    BOOL myBool;
    int myInt;
}
@end

@implementation MyClass

-(id)init{
    //...
    myInt = 3;
    myBool = YES; //here i set it
    //...
    [self addObjectsToGame];
    //...
    return self;
}

-(void)addObjectsToGame{
    //...
    assert(myInt == 3);
    assert(myBool);    // <---- this line would fail
    //...
    NSLog(@"didn't fail");
}

@end

このコードは失敗しませんでした

于 2012-11-21T03:25:41.633 に答える
0

うわー、私はiOSの初心者です -

すべてのBOOL値はNO(ランダムではなく)初期化され、取得し続けた理由は、割り当てる前に権利NOを使用していたためであり、それを作成したためです(ただし、ほとんどの場合は問題になりません)BOOLnon-atomic

これが本当の理由でした。ただし、これは非常に些細な間違いであるため、他の人の答えを受け入れるつもりです

于 2012-11-24T21:39:11.123 に答える