書くことの違いは何ですか
+(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ます。