2010-03-31 3 views
0
+ (void)findAndCopyOfDatabaseIfNeeded{ 
NSArray   *path    = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString  *documentsDirectory = [path objectAtIndex:0]; 

NSFileManager *fileManager  = [NSFileManager defaultManager]; 
NSString  *databasePath  = [documentsDirectory stringByAppendingPathComponent:@"DB"]; 
BOOL success = [fileManager fileExistsAtPath:databasePath]; 
if(!success){ 
    NSString *resourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"DB"]; 
    [fileManager copyItemAtPath:resourcePath toPath:databasePath error:NULL]; 
} 

NSString  *tracePath   = [documentsDirectory stringByAppendingPathComponent:@"Trace"]; 
BOOL traceDir = [fileManager fileExistsAtPath:tracePath]; 
if(!traceDir){ 
    NSString  *resourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Trace"]; 
    [fileManager copyItemAtPath:resourcePath toPath:tracePath error:NULL]; 
} 


NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setDateFormat:@"yyyy"]; 

NSDate *today   = [[NSDate alloc]init]; 
NSString *resultYear = [dateFormatter stringFromDate:today]; 
NSString *traceYearPath = [tracePath stringByAppendingPathComponent:resultYear]; 
BOOL yearDir = [fileManager fileExistsAtPath:tracePath]; 
if (!yearDir) { 
    [fileManager createDirectoryAtPath:traceYearPath attributes:nil]; 
} 
//[resultYear  release]; ? 
//[today  release]; ? 
//[dateFormatter release]; ? 

}에 변수 릴리스에 대한 질문이 있습니다. 흠, NSArray, NSString 및 NSFileManager가 출시되었습니다.나는 글로벌 클래스

가변 릴리스 또는 해제하지 않습니까? 나를위한 조언을 부탁드립니다.

답변

1
NSString *resultYear = [dateFormatter stringFromDate:today]; 
//[resultYear  release]; ? 

당신은 releaseresultYear 할 필요가 없습니다. stringFromDate:에서 반환 된 개체는 autorelease 'd가됩니다.

이름이 "create"또는 "new"로 시작하지 않는 메소드에서 반환 된 객체가 autorelease '일 것이라고 가정하는 것이 일반적으로 안전합니다. 최소한 Apple 코드가 있어야하지만 일반적으로 코코아 협약이므로이를 준수해야합니다. 당신 alloc이 '을 에드 이후

NSDate *today   = [[NSDate alloc]init]; 
//[today  release]; ? 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
//[dateFormatter release]; ? 

당신은, todaydateFormatter 모두 해제해야합니다. alloc과 항상 release 또는 autorelease을 자신의 코드로 연결하십시오.

1

예 : NSArray * 경로가 해제되지 않습니다. 자동 복구됩니다 (거의 항상 id는 함수에 의해 반환 됨).
또한 fileManager를 해제하지 않습니다. 공유 된 싱글 톤 객체입니다.