Мое приложение иногда считывает данные, использует его, а затем, возможно, потребуется прочитать его позже. Я заметил, что если я прочитаю данные, когда он будет выпущен, но если я снова его прочитаю, он никогда не будет выпущен.Objective-C, NSMutableData не выпущен
Почему данные не отпущены, если они читаются снова?
Код:
#import "AppDelegate.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[self readData]; // read one
NSLog(@"read1");
sleep(1);
[self readData2];
}
- (void)readData2 {
[self readData]; // read two
NSLog(@"read2");
}
- (void)readData {
__block NSMutableData *data = [NSMutableData dataWithContentsOfFile:@"test"]; // file is 125 MB
NSUInteger size = [data length];
for (NSUInteger i = 0; i < size; i++) {
// do stuff
}
return;
}
@end
Я видел, как это утверждал, что 'dataWIthContentsOfFile' эффективно создает«буквальным»со значением файла данных, и сохраняется, так же как строковые литералы и малых NSNumber. Я не уверен, насколько я этому верю. –
Есть ли причина использования типа хранения '__block' в этом случае? Как он себя ведет, если вы это измените? – Nick
@HotLicks, Spot on, и я верю в это. Я не уверен, что это буквальный, но значение определенно сохраняется с помощью 'dataWIthContentsOfFile' без' options'. –