1

私はCocoaを初めて使用するので、使用しているスタイルとコードが自分の目的に適した形式であることを確認したいと思います。

特にヘッダー(マークa))では、変数を?の外に設定するとどのような影響があり@interfaceますか?

b)そして第二に、クラス宣言内に登録せずにインスタンスから(ある時点で)変数を使用することの効果は何ですか?

ヘッダーファイル:

    #import <UIKit/UIKit.h>

    ///////////// a) Is this good use?
    int myint; 
    /////////////        

    @interface InstancecheckViewController : UIViewController
    - (IBAction)plusone:(id)sender;
    @property (weak, nonatomic) IBOutlet UILabel *counting;
    @end

実装:

    #import "InstancecheckViewController.h"
    @interface InstancecheckViewController ()
    @end
    @implementation InstancecheckViewController
    @synthesize counting;

    ///////////////////// b) is this good use?
    - (void)resetit {
        myint = 0;   
    } 
    /////////////////////

    - (IBAction)plusone:(id)sender {
        myint ++;
        if (myint >10){
            [self resetit];
        }
        NSString* myNewString = [NSString stringWithFormat:@"%d", myint];
        counting.text = myNewString;
    }
    @end

編集
コメントありがとうございます。.hのインスタンスと整数を適切に再定義したと思います

    @interface instancecheckViewController : UIViewController
    {
    @private
    int myint;
    }
    - (IBAction)plusone:(id)sender;
    - (void)resetIt;
    @end
4

3 に答える 3

1

と:

///////////// a) Is this good use?
int myint; 
/////////////        

グローバルな可変変数を宣言しました。インスタンス変数とは異なります。これは使用しないでください。さらに、これは定義です。このアプローチではリンカー エラーが発生します。

と:

///////////////////// b) is this good use?
- (void)resetit {
    myint = 0;   
} 
/////////////////////

グローバルな可変変数に書き込んでいます。これはスレッドセーフではありません。これは、ivar が暗黙的にスレッドセーフであることを意味するものではありませんが、アクセスがインスタンスに制限されているため、一般にグローバル アクセスよりも安全です。

インスタンス変数として宣言するだけです:)

于 2012-04-27T17:19:15.137 に答える
0

これにより、インスタンス間で共有されるグローバル変数を宣言します。したがって、クラスのインスタンスから変更すると、他のすべてのインスタンスに影響します。これが必要かどうかはわかりません。上記の動作を明示的に必要としない場合は、代わりにインスタンス変数を使用することをお勧めします。

于 2012-04-27T17:09:50.923 に答える
0

ちょうど私の2セント。これはグローバル変数であり、あまり良くありません。それを使用する習慣をつけない方が良いです。グローバル変数を使用するコードはほとんど見られません。Objective-C のすべての基本、つまりプロトコル、カテゴリ、拡張機能を学習すると、とにかくグローバル変数を持つ必要がほとんどないことがわかります。

于 2012-04-27T17:25:53.403 に答える