1

強い@property (strong, nonatomic)と宣言されたクラスのプロパティを強制的に割り当て解除する方法はありますか?

プロパティの1つが割り当て解除されているクラッシュからのレポートを受け取りましたが、アプリはAFHTTPRequestのCompletionBlockからそれらにアクセスしようとしています。しかし、プロパティの割り当てが解除されたため、アプリがクラッシュしました。

シナリオを再現できなかったので、シナリオをテストするためだけにプロパティの割り当てを強制的に解除できるものが必要です。

私はdeallocメソッドを使おうとしましたが、ARCはそれを禁止しています。

ありがとう

4

4 に答える 4

5

ARC の下でオブジェクトの割り当てを「強制」解除することはできません。ただし、任意のオブジェクトを nil に割り当て、メソッドの残りのスコープでは使用しないことで、削除を (一種の) 推奨できます。割り当て解除されたオブジェクトへのアクセスに問題がある場合は、まったく逆のことが必要です。つまり、所有しているオブジェクトを保持して、プロパティの割り当てを解除しないようにする必要があります。

于 2013-03-13T13:36:26.610 に答える
2

メモリを強制的に解放するには、そのオブジェクトに nil を設定します

元 :

@property (nonatomic , strong) NSString *str;

str = nil;
于 2013-03-13T13:51:54.640 に答える
2

私は今、同じ問題を自分で解決しました。

アプリのいくつかのポイントで明らかな参照を nil に設定しましたが、それでもオブジェクトは消えません。

オブジェクトはタイマーを使用しており、これらはすべてオブジェクトへの強い参照を持っています。それらを無効にすると、dealloc がついに実行されました。

他の誰もが投稿しているように、dealloc を実行するには、オブジェクトへのすべての強い参照を nil にする必要があります。また、それらの参照を徹底的に追跡してください。

于 2014-11-21T13:25:52.747 に答える
2

強力なプロパティで割り当てられたメモリを強制的に解放する唯一の方法は、それを nil に設定することです。

意味:

@property (nonatomic, strong) NSArray *testArray;

testArray = //array return from some method;

testArray = nil; //It'll release the memory associated
于 2013-03-13T13:37:20.203 に答える