을 "포인터가 할당되지 않았습니다 해제되지"...목표 C의 메모리 관리 - 오류
I (나는 아주 새로운 해요) 그리고 난 메모리 관리에 문제가 TouchXML을 사용하는 iPad 앱을 개발하고 있습니다.
CXMLDocument를 확장하는 클래스를 만들었으며 일부 내용을 읽고 속성에 저장하여 초기화 작업을 수행했습니다.
@interface SimpleManifest : CXMLDocument {
CXMLNode *_defaultOrganization;
NSString *_title;
NSDictionary *dictionary;
}
@property (readonly) CXMLNode *defaultOrganization;
@property (readonly) NSString* title;
- (id) initWithPath:(NSString *)path options:(NSUInteger)options error:(NSError **)error;
@end
(SimpleManifest.m) : 여기
내 코드 (SimpleManifest.h)는 다른 클래스에 나중에#import "SimpleManifest.h"
#import "CXMLNode_XPathExtensions.h"
@implementation SimpleManifest
- (id) initWithPath:(NSString *)path options:(NSUInteger)options error:(NSError **)error
{
/*
NSURL *theURL = [[[NSURL alloc] initFileURLWithPath:path] autorelease];
self = [self initWithContentsOfURL:theURL options:options error:error];
*/
NSData *data = [NSData dataWithContentsOfFile:path];
NSString *s = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
self = [self initWithXMLString:s options:options error:error];
if (self==nil) return nil;
// load main props
dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
@"http://www.imsglobal.org/xsd/imscp_v1p1", @"imscp",
@"http://ltsc.ieee.org/xsd/LOM", @"lom", nil];
// defualt organization
@try {
CXMLNode *orgsElem = [[[self childAtIndex:0] nodesForXPath:@"//imscp:organizations" namespaceMappings:dictionary error:nil] objectAtIndex:0];
NSString *xpath = [NSString stringWithFormat:@"//imscp:organization[@identifier='%@']", [[orgsElem attributeForName:@"default"] stringValue]];
_defaultOrganization = [[[self childAtIndex:0] nodesForXPath:xpath namespaceMappings:dictionary error:nil] objectAtIndex:0];
/*
NSArray *nodes = [[self childAtIndex:0] nodesForXPath:@"//imscp:organizations" namespaceMappings:dictionary error:nil];
NSString *xpath = [NSString stringWithFormat:@"//imscp:organization[@identifier='%@']", [[[nodes objectAtIndex:0] attributeForName:@"default"] stringValue]];
_defaultOrganization = [[[self childAtIndex:0] nodesForXPath:xpath namespaceMappings:dictionary error:nil] objectAtIndex:0];
*/
CXMLNode *titleElem = [[[self childAtIndex:0]
nodesForXPath:@"//lom:general/lom:title/lom:string"
namespaceMappings:dictionary
error:nil] objectAtIndex:0];
_title = [[titleElem stringValue] copy];
} @catch (NSException * e){
self = nil;
return nil;
}
return self;
}
@end
내가 할 :
- (BOOL) isValidSCORMLesson:(NSString*) path {
NSString *manifPath = [path stringByAppendingPathComponent:@"imsmanifest.xml"];
if (![[NSFileManager defaultManager] fileExistsAtPath: manifPath isDirectory: NO])
return NO;
SimpleManifest *manifest = [[[SimpleManifest alloc] initWithPath:manifPath options:0 error:nil] autorelease];
NSLog(@"%@", manifest.defaultOrganization);
NSLog(@"%@", manifest.title);
return (manifest!=nil);
}
그것을 내가 풀어 낸 포인터의 톤이 할당되지 않았습니다 "오류가 발생했습니다 ... NSLog 호출을 주석으로 처리하면 변경됩니다. manifest.title 속성을 위에서 로깅하거나 그냥 로깅하십시오. 프로젝트에서 ARC를 사용하지 않으므로 메모리 관리에 문제가 있음을 확신합니다.
내가 잘못하고있는 부분을 누군가 도와 줄 수 있습니까? 감사!
할당하지 않은 포인터 변수를 해제하려고합니다. –
dealloc 또는 해제 할 위치를 표시 할 수있는 경우 –