1
-(id)init
{
if (self = [super init]) 
{
    self.dmrPlaylists = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];
     }
}
-(void)dealloc
{   
[self.dmrPlaylists release];
}
-(DMRPlaylist *)getDMRPlaylistByUUID:(NSString *)deviceUUID
{
if (deviceUUID == nil)
    return nil;

for(int i = 0; i < self.dmrPlaylists.count; i++)
{
    DMRPlaylist * dmrPlaylist = [self.dmrPlaylists objectAtIndex:i];
    if([dmrPlaylist.deviceUUID isEqualToString:deviceUUID])
    {
        return dmrPlaylist;
    }
}

return nil;
}

Memory(Core Foundation / Object-C)この時点で呼び出し元が所有していないオブジェクトの参照カウントの誤ったデクリメント。

前もって感謝します。

4

2 に答える 2

1

1)およびメソッドで使用しないself.dmrPlaylistsでください。代わりに、基になる変数と対話します。 initdealloc

2)電話[super dealloc]

警告がオンになっている行がわからないと、確信が持てませんが、これらは問題です。

于 2012-05-25T01:57:21.963 に答える
0

上記のコードのどの部分がエラーを引き起こしているかを教えてくれませんでした。デバッガーでステップスルーして、問題が発生した場所を特定し、私たちに戻ってきてください。

また、何が問題なのかを知るのに十分なコードが提供されていません。例えば:

self.dmrPlaylists = [[[NSMutableArray alloc] initWithCapacity:0] autorelease];

おそらく最終的には-setDmrPlaylists:、自動解放された可変配列で呼び出します。どこで-setDmrPlaylists:定義されていますか?@propertyステートメントと@synthesizeedで宣言されていますか?もしそうなら、それはretainプロパティとして宣言されていますか? そうでない場合、セッターはretain変更可能な配列を呼び出すことはありません。またautorelease、イベント ループの最後で可変配列の保持カウントがデクリメントされると、割り当てが解除され、ジャンク メモリを指すようになります。

于 2012-05-25T02:14:15.227 に答える