書くことの違いは何ですか
+(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];
}
書くことの違いは何ですか
+(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];
}
ストレージは です。これはstatic
、プロセスごとに変数が 1 つしかないことを意味します。たとえば、iOS アプリケーション全体で変数が 1 つだけです。
たとえば、static
変数に何かを代入すると、その値は関数の終了後もそこにあります。これは、変数に割り当てられた値が関数などのスコープの終了後に消えるローカル変数を使用する場合には当てはまりません。
2 番目の例から、2番目のものはローカル変数として宣言されているため、obj
常に関数の先頭になります。nil
一方、obj
最初のものは、最初の呼び出し後のnil
新しいインスタンスに割り当てられるため、最初の呼び出しのみになりMyObj
ます。