1

アプリケーションがクラッシュする問題があり、それを変更するためにあらゆることを試みましたが、うまくいきませんでした。だから、新しい目のセットが私を少し助けてくれることを願っています.

ここに私のコードのビューがあります:

.h

@property (nonatomic, retain) UILocalNotification *notification;

.m

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.fireDate = [[NSDate date] dateByAddingTimeInterval:60*60*24];
    notification.alertBody = @"Skal du ikke træne i dag? Det tager kun 7 minutter!";
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];

}

分析すると、次のエラーが表示されます。

  • 「通知」に保存されたオブジェクトの潜在的なリーク

あなたの一人が私を助けてくれることを本当に願っています。ありがとう!

4

3 に答える 3

0

他の質問と同様に、次を変更します。

UILocalNotification *notification = [[UILocalNotification alloc] init];

に:

self.notification = [[UILocalNotification alloc] init];

self.notification他の場所の代わりに使用しnotificationます。最近のバージョンの Xcode を使用しているため、デフォルトで ARC が有効になります。もしそうなら、使用に関する上記の答えreleaseは正しくありません。

注: この回答を編集して、ivar に直接アクセスする代わりに、プロパティのドット表記を使用しました。その背景については、この SO の回答を参照してください: ARC の強力なプロパティには self.iVar が必要ですか?

于 2013-07-03T18:24:26.330 に答える
0

-releaseまたは-autorelease新しい通知が必要です。これを行う簡単な方法は次のとおりです。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UILocalNotification * notification =
      [[[UILocalNotification alloc] init] autorelease];
                                          ^^^^^^^^^^^

    notification.fireDate = [[NSDate date] dateByAddingTimeInterval:60*60*24];
    notification.alertBody = @"Skal du ikke træne i dag? Det tager kun 7 minutter!";
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];

}

システムは命名規則に (大きく) 依存しています。イニシャライザ (例: -init)、コピア (copy、mutableCopy) は、+new解放 (または自動解放) する必要があるインスタンスを返すメソッドの例です。

また、プロパティUILocalNotification * notification = ...をシャドウするメソッド本体に対してローカルな新しい変数を宣言することにも注意してください。notification

于 2013-07-03T21:45:57.300 に答える
-1

ローカルを割り当てていますが、UILocalNotification解放していません。少なくとも、投稿したコードにはありません。リソースが解放されていないため、アナライザーはあなたを捕まえました。他の場所でリリースしている場合、正当な方法でアナライザーはそれをキャッチしません。

これを修正するには、ローカル変数をプロパティに割り当てて、プロパティの所有者 (アプリ デリゲートのように見えます) が通知への生きた参照を保持するようにする必要があります。

self.notification = notification;

メソッドを終了する前にリリースして、保持カウントのバランスを確実にとるようにします。

[notification release];

最後に、通知の使用が完了したら、プロパティを無効にすることができます。アプリデリゲートから解放します。使い終わったら必ず実行してください。

self.notification = nil
于 2013-07-03T17:47:43.327 に答える