sto sviluppando un progetto su iOS 7 utilizzando ARC, voglio rilasciare una proprietà privata quando il viewController viene rilasciato
Ecco l'TestViewController che si presenta come una vista modale controllo, l'impostazione di un valore alla proprietà privata in testAVPlayer viewDidLoad:Come per rilasciare la proprietà privata in iOS 7 utilizzando ARC
//TestViewController.m
#import "TestAVPlayer.h"
@interface TestViewController() {
TestAVPlayer *testAVPlayer;
}
@end
- (void)viewDidLoad
{
[self setupPlayer];
}
- (void)setupPlayer {
AVPlayerItem *item = [AVPlayerItem playerItemWithURL:[[NSBundle mainBundle] URLForResource:@"music" withExtension:@"mp3"]];
testAVPlayer = [TestAVPlayer playerWithPlayerItem:item];
[testAVPlayer setActionAtItemEnd:AVPlayerActionAtItemEndNone];
[testAVPlayer play];
}
- (void)dealloc {
NSLog(@"dealloc TestViewController: %@", self);
}
testAVPlayer è una sottoclasse di AVPlayer, ho messo un NSLog nella dealloc
// TestAVPlayer.h
#import <AVFoundation/AVFoundation.h>
@interface TestAVPlayer : AVPlayer
@end
// TestAVPlayer.m
#import "TestAVPlayer.h"
@implementation TestAVPlayer
- (void)dealloc {
NSLog(@"dealloc testAVPlayer: %@", self);
}
@end
Quando TestViewController è respinto, il testAVPlayer sembra mai essere rilasciato, vedo il "dealloc TestViewController", ma non v'è alcuna "dealloc testAVPlayer" nel registro della console
non è necessario dealloc questo è il punto intero di ARC ... – meda
@meda yes, ma 'dealloc' dovrebbe ancora essere chiamato quando rilasciato da ARC. Qualcosa deve mantenere l'oggetto, ma temo che non ci sia abbastanza per andare avanti qui. –
È possibile conservarlo da qualche parte nel blocco o utilizzare il timer ripetuto senza invalidarlo. Non sono abbastanza informazioni ora. –