2012-04-27 8 views
1

私はCocoaを新しく使いました。私が使用しているスタイルとコードが自分の目的に合ったものであることを確認したいと思います。Objective-Cコーディングスタイル(むしろセマンティクス)

具体的には、ヘッダー(a))には、@interface以外の変数を設定した場合の影響はありますか?

第2に、インスタンス(点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 
+0

Btw、これはXcodeとは関係ありません。 –

+1

Objective-CはまだCです。C言語を学ぶことをお勧めします。これは小さな言語です。 Kernighan&Ritchieによる* The C Programming Language *を参照してください。 (トピックに関する私の投稿:http://qualitycoding.org/objective-c-is-c/) –

答えて

0

にインスタンスと整数を再定義しました。したがって、クラスのインスタンスから変更すると、他のすべてのインスタンスに影響します。私はあなたがこれを望むかどうか分からない。上記の動作を明示的に必要としない場合は、代わりにインスタンス変数を使用することをお勧めします。

1

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

あなたはグローバル、変更可能な変数を宣言しました。インスタンス変数と同じではありません。これは使用しないでください。さらに、の定義です。この方法ではリンカーエラーが発生します。

:あなたはグローバル、変更可能な変数に書いている

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

。これはスレッドセーフではありません。それはivarが暗黙的にスレッドセーフであることを暗示するものではありませんが、そのアクセスがインスタンスに限定されているため、一般的にグローバルアクセスより安全です。

ただインスタンス変数として宣言してください:)

+0

ちょっとした注意: '@ public' iVarはオブジェクトの1つのインスタンスに限定されておらず、 @パッケージ 'iVar。 –

0

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

関連する問題