2011-08-04 10 views
1

以下のコードでは、「self」でインジケータを詰めた場合、クラッシュなしで自分自身を使用しないとクラッシュします。 @propertyによって作成され保持されたイーバルズにアクセスするために、常に「自己」を使用するべきではないというルールはありませんか?UIActivityIndi​​catorView nillifyでクラッシュします

@property(nonatomic,retain) UIActivityIndicatorView* activityIndicator; 


if(activityIndicator!=nil){ 
    [activityIndicator removeFromSuperview]; 
     //self.activityIndicator = nil; //crashes! 
       activityIndicator = nil;  //does not crash 
} 

答えて

3

は、一般的に言えば:

self.activityIndicator = nil; //crashes! 

はactivityIndi​​catorをreleaseますので、これはクラッシュする可能性が関連しています。

activityIndicator = nil;  //does not crash 

は、アクティビティインジケータをリリースしません。クラッシュすることはなく、メモリリークが発生します。あなたの具体的な場合には

は、おそらくクラッシュは、あなたがこの実行するという事実に依存します:活動の指標が解放された

[activityIndicator removeFromSuperview]; 

を。保持カウントが0になった場合でも、オブジェクトの割り当てが解除されますが、オブジェクトの割り当てが解除されたことを反映するためにプロパティは更新されません。だから、それをnilに設定すると、セッターはそれを解放しようとしますが、オブジェクトはもう存在しないので、クラッシュします。

これは推測です。クラス内のアクティビティインジケータが正しく保持されている場合は発生しません。だから、activityIndicatorを使用しているアクティビティインジケータとコード内の場所を作成するコードを確認するか、ヘルプを投稿してください...

+0

はい私はすでに自動リリースしていました。私はdeallocとselfにリリースを移しました。新しい作品を募る – Spring

関連する問題