0

アップルのオリジナル「Photos.app」のような自分のフォトギャラリーを書きたいです。AppDelegateでUITabbarcontrollerを作成し、次に「ImageViewController」と「VideoViewController」を作成しました。

「ImageViewController」にUIScrollViewを追加し、imagePerRow、画像、パディングなどのさまざまなプロパティを使用して独自の「PhotoGallery」のインスタンスを作成しました。

「PhotoGallery」では、「NSObject」のサブクラスとして新しいObjective-cクラスを作成しました。ここでは、すべての異なる画像をUIButtonとして配置しています。次に、デバイスの向きが変わったときのすべての画像の配置を記述する別の関数を追加しました。そしてdealloc-function。それで全部です。

このクラスはうまく機能し、デバイスの向きが変わったときの再配置もうまくいきます。問題は、ios-simulatorでメモリ警告をシミュレートした場合、PhotoGalleryが正しく割り当て解除されたのは初めてですが、警告を再度シミュレートすると、次のエラーメッセージが表示されます: "[PhotoGallery release]:メッセージが割り当て解除されたインスタンスに送信されました"。

NSObjectというサブクラスのせいだと思いましたよね?次に、UIViewとしてテストしました。同じエラーで。だから私はもう何をすべきかわからないことを知っています。問題が何であるかを理解し、それについていくつかのヒントを教えていただければ幸いです。init-functionをもう一度呼び出すことを考えてみてください。どのように?「drawRect」が必要ですか?わからない。

お手数をおかけしますが、Gさん。

4

1 に答える 1

1

PhotoGalleryへの参照を保持するプロパティをnilに設定していない可能性があります。

すなわち。割り当て解除されたインスタンスへの参照を保持し、それを呼び出そうとreleaseしています。

悪い例:

- (void) didReceiveMemoryWarning
{
    [photoGallery release];
}

safe(r)の例:

- (void) didReceiveMemoryWarning
{
    [photoGallery release];
    photoGallery = nil;

    // or combine both actions if your property attributes are set up to accommodate it:
    // self.photoGallery = nil;
}

悪い例では、photoGalleryはまだ割り当て解除されたインスタンスへの参照を保持しており、2番目のメモリ警告はそれにメッセージを送信しようとします。

safe(r)の例では、photoGalleryはnilであり、nilにメッセージを送信するのは安全です。

于 2011-01-05T23:47:01.767 に答える