5

最近、Cocoa で作業した後に iOS に目を向けたところ、SIGABRT で次のエラーが表示されて驚きました。

クラス参照を調べたところ、NSColor とは対照的に、UIColor はプロトコルを採用していません。

さて、これは大したことではありません。カラーインスタンスのアクティブな所有権を取得して、使用後すぐに破棄することで、より効率的にしようとしていました。しかし、Apple が iOS でガベージ コレクターを省略した背後にある目的は、開発者に私が行っていたのとまったく同じことを行うよう促すことであり、メモリが不足し、バッテリーが不足しているポータブル デバイスで無駄のないメモリ プロファイルを維持することだと思いました。

Apple の理論的根拠に関するアイデアはありますか、それとも私の仮定に誤りがありますか?

4

2 に答える 2

5

NSCopyingプロトコルを 実装すると「アクティブなメモリ管理が促進される」とあなたが考える理由がわかりません。

は不変であるためUIColor(内部状態を変更するメソッドを実装していません)、コピーを作成しても意味がありません。retain手元に置いておきたい場合にだけ、使いrelease終わったらそれを。他に何も必要ありません。

本当に必要な場合は、カテゴリにコピーを追加できます。

@implementation UIColor (Copying) <NSCopying>

- (id)copyWithZone:(NSZone *)zone
{
    return [self retain];
}

@end

しかし、明らかに、それは実際には新しい機能を提供しません。どうやら Apple は、そのクラスを実装するのに時間をかける価値があるとは考えていなかったようです。

于 2012-03-18T19:56:18.223 に答える