1

書くことの違いは何ですか

+(MyObj*)obj
{
    static MyObj *obj= nil;
    if(!obj)
       obj = [[super allocWithZone:nil] nil];
}

+(MyObj*)obj
{
    MyObj *obj= nil;
    if(!obj)
       obj = [[super allocWithZone:nil] nil];
}
4

2 に答える 2

1

ストレージは です。これはstatic、プロセスごとに変数が 1 つしかないことを意味します。たとえば、iOS アプリケーション全体で変数が 1 つだけです。

たとえば、static変数に何かを代入すると、その値は関数の終了後もそこにあります。これは、変数に割り当てられた値が関数などのスコープの終了後に消えるローカル変数を使用する場合には当てはまりません。

2 番目の例から、2番目のものはローカル変数として宣言されているため、obj常に関数の先頭になります。nil一方、obj最初のものは、最初の呼び出し後のnil新しいインスタンスに割り当てられるため、最初の呼び出しのみになりMyObjます。

于 2013-06-09T01:48:00.100 に答える