3

私の理解では、[nsnumber initWithInt]などの「便利な」メソッドは、指定されたクラスのコピーを作成し、目的の値に初期化する必要があります。

minutesLeft=[NSNumber initWithInt:((timeLeft)%60)];

Timeleftは整数であるため、initWithIntが機能し、その結果、minutesLeft(保持するように設定されたプロパティ)が新しいNSNumberを受信し、保持する必要があります。問題は、何らかの理由で、「NSNumberが+initWithIntに応答しない可能性がある」という警告が表示されることです。問題のプロパティは保持するように設定されているため、[nsnumber alloc] initwithintを使用したくありません。これは、プロパティを解放する必要があるためです。

何か案は?

4

2 に答える 2

4

次のような意味ですか。[NSNumber numberWithInt:number]; この値は自動解放されるため、保持する必要がある場合があることに注意してください。Macを使用している場合でも、心配する必要はありません。

このようなものが必要であるが、他のクラスにはない場合は、いつでもカテゴリを記述して、任意のカカオクラスを拡張できます。

http://cocoadevcentral.com/d/learn_objectivec/

于 2010-09-05T04:11:12.707 に答える
2

コンビニエンスクリエーターが常に利用できるとは限らないため、つまり:

self.minutesLeft = [NSNumber numberWithInt:number];

便利なクリエーターが利用できないときに自動リリースされたオブジェクトが必要な場合は、別のパターンが一般的です。

self.minutesLeft = [[[NSNumber alloc] initWithInt:number] autorelease];

または最後に

NSNumber * n = [[NSNumber alloc] initWithInt:number];
self.minutesLeft = n;
[n release], n = 0;

さらに、(ガベージコレクションではなく)マネージドメモリと互換性があるように新しいコードを作成する必要があると想定することをお勧めします。追加の自動解放が送信されたオブジェクトを追跡することは、管理されたメモリのコンテキストでプログラムを使用する場合、ひどく時間がかかる可能性があります。追跡や再現が難しいバグがたくさんある可能性があります(大きなリークを含む)。参照カウントインターフェイス/ルーチンを書くことは第二の性質である必要があります-後でそれを追加するのではなく、クラスを書いているときに書くのは非常に簡単です(読む:非常に時間がかかる多くのコードを読む必要があります) -次に、更新されたすべてのプログラムをテスト、テスト、テストする必要があります。

于 2010-09-05T06:17:17.333 に答える