내 문서 기반 앱에 메모리 누수가 있습니다. 그것은 잘 시작, 나는 열거 나 새 문서를 만들 수 있지만 하나 또는 두 번, 그리고 응용 프로그램이 충돌합니다. Xcode에서 분석 도구를 사용했는데 문제가 없습니다.NSDocument - 메모리 누수 및 앱 충돌
그러나 인스트루먼트는 메모리 누수를 표시하지만 코드에있는 부분을 찾을 수 없습니다.
개체 할당을 사용하면 문서를 닫을 때 내 NSDocument 하위 클래스가 해제되지 않는 것을 볼 수 있습니다 ... 이것이 의도 한 동작인지 정말로 모르겠습니다.
-(NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
NSMutableData *d = [NSMutableData data];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]
initForWritingWithMutableData:d];
[archiver encodeObject:[self machine]
forKey:IVPCodingKeyMachine];
[archiver finishEncoding];
[archiver release];
if(outError) {
*outError = [NSError errorWithDomain:NSOSStatusErrorDomain
code:unimpErr
userInfo:NULL];
}
return d;
}
-(BOOL)readFromData:(NSData *)data
ofType:(NSString *)typeName
error:(NSError **)outErro {
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]
initForReadingWithData:data];
machine = [[unarchiver decodeObjectForKey:IVPCodingKeyMachine] retain];
[machine setDelegate:self];
[unarchiver finishDecoding];
[unarchiver release];
if(outError) {
*outError = [NSError errorWithDomain:NSOSStatusErrorDomain
code:unimpErr
userInfo:NULL];
}
return YES;
}
machine
속성과 같이 선언 : 다음 machine
바르에 @property(readonly) IVPMachine *machine;
및 IVPMachine
클래스 NSCoding
프로토콜을 준수 내가 읽고 문서를 작성하는 방법 여기
이다.
이-(id)initWithType:(NSString *)typeName error:(NSError **)outError {
self = [super initWithType:typeName error:outError];
if (self) {
machine = [[IVPMachine alloc] initWithCreditAmount:2000];
[machine setDelegate:self];
[machine setGame:[[IVPGamesLibrary sharedInstance]
objectInGamesAtIndex:0]];
}
return self;
}
마지막 -(void)dealloc;
방법 나는 machine
바르 해제 : 새 문서의 경우에는 내가 여기, 내가 사용하는 코드를 -(id)initWithType:(NSString *)typeName error:(NSError **)outError;
방법을 무시했다.
버그가있는 곳을 알아낼 수 없습니다. 앱에서 문서를 닫을 때 내 문서 서브 클래스 인스턴스가 해제되어 있지 않습니까?
어떤 도움을 환영합니다. 고맙습니다.
I/O 메소드에서 반환하는 오류가 잘못되었습니다. 당신은 그것들을 명확하게 구현했기 때문에'unimpErr'를 반환하는 것은 의미가 없습니다. 진실에 더 가까운 것을 돌려 주어야합니다. FoundationErrors.h는 시작하기에 좋은 곳입니다 (그리고 그 오류들은'NSCocoaErrorDomain'에 있습니다). –