クラスメソッドに渡されたオブジェクトの保持と解放のベストプラクティスは何ですか?例えばObjective-Cクラスメソッドのオブジェクト保持動作
、あなたは "クラス変数" はそうのように宣言している場合:
static NSString *_myString = nil
...これを行うには正しいことである:
+ (void)myClassMethod:(NSString *)param {
_myString = param;
}
...持っています早期に解放されないように、呼び出し側がparamで非ゼロの保持カウントを維持する必要があるという欠点があります。また一つはこれを行うことができます:対応するクラスレベルdealloc
コールせずに、それはメモリリークが発生しますという欠点があった
+ (void)myClassMethod:(NSString *)param {
[_myString autorelease];
_myString = [param retain];
}
を...。あるいは、この種のクラス変数は、従来の方法でこれらのオブジェクトのライフタイムを管理するシングルトンクラスを使用して完全に回避する必要がありますか?
ここにはApple's docs on creating a singleton instanceです。
私が作業しているコードは非常に滑らかですが(しかし、まだ新しい)Objective Resourceプロジェクト(http://www.iphoneonrails.com/)です。
あなたは間違った質問をしています。グローバル変数の実行方法を尋ねる代わりに、グローバルを取り除く助けを求めるべきです。そして、はい、これをクラスメソッド(またはシングルトン)の背後に隠しても、これはまだグローバル変数です。 – Sven