2010-03-31 2 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]; ? 

}У меня есть вопрос о переменном выпуске в мировом классе

Я использую глобальный класс как это [+ (пустота) findAndCopyOfDatabaseIfNeeded]. hm ,, Я не знаю, NSArray, NSString и NSFileManager выпущены.

Переменный выпуск или не выпуск? пожалуйста, совет для меня.

ответ

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

Вам не нужно releaseresultYear. Объект, возвращенный с stringFromDate:, будет autorelease 'd.

Как правило, можно предположить, что объекты, возвращаемые методами, имена которых не начинаются с «create» или «new», будут autorelease 'd. По крайней мере, с кодом Apple, но это соглашение для Cocoa в целом, поэтому вы также должны следовать за ним.

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

Вам нужно освободить как today и dateFormatter, так как вы alloc «эд их. Всегда соединяйте alloc с release или autorelease в своем собственном коде.

1

Да и еще несколько: не освобождают путь NSArray * - он автореализован (почти всегда возвращается идентификатор функциями).
также не выпускает файлManager - это общий одноэлементный объект