をリーク:呼び出し側によって、この時点で所有されていないオブジェクトの参照カウントの 不正な減少を不正な減少はにdeallocで私が得る、「分析」で
#import <AVFoundation/AVFoundation.h>
@interface XYZViewController : UIViewController
@property (retain) AVAudioRecorder *recorder;
@end
@implementation XYZViewController
@synthesize recorder;
- (void) dealloc
{
[self.recorder release];
[super dealloc];
}
- (void) viewDidLoad
{
NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0], AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax], AVEncoderAudioQualityKey,
nil];
NSError *error;
self.recorder = [[[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error] autorelease];
}
@end
私はそれを放つべきではないという意味ですか? また、私はコードを 'プロファイル'しようとしていて、何からでもメモリリークが[[[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error] autorelease]
から出ます。
したがって、 'self.foo = nil;'は '[foo release]よりも優れています。 foo = nil; '。私はdeallocとviewDidUnloadの両方でそれを使用します。ありがとうございました! –
'-dealloc'(または' -init'の 'self.foo = bar;')で 'self.foo = nil;'を使うことに注意する唯一のことは、副作用がある '-setFoo:'のカスタム実装では、奇妙なバグが発生する可能性があります。 '-init'や' -dealloc'の文脈では、あなたのオブジェクトは無効または初期化されていない状態であるとみなされるので、 'self'にメッセージを送るときは注意が必要です。しかし、単純なプロパティを設定またはクリアする一般的なケースでは、ドット表記法を使用します。メモリ管理のバグは、副作用のバグよりも一般的です。 –