Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 71

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

1. ΠœΡ‹ собираСмся асинхронно Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

2. Π’ Ρ…ΠΎΠ΄Π΅ выполнСния этого Π±Π»ΠΎΠΊΠ° Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ (синхронно) Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π•Π³ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для скачивания изобраТСния ΠΏΠΎ URL, ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ функция dispatch_sync. ΠœΡ‹ поступаСм ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, стоящСго Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π»Π°ΡΡŒ, ΠΏΠΎΠΊΠ° Π½Π΅ загрузится ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ заставляСм ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π° Π½Π΅ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Если синхронно ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΏΠΎ URL ΠΈΠ· асинхронного Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, ΠΌΡ‹ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅ΠΌ лишь ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π½Π΅ Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ. Вся опСрация Ρ‚Π°ΠΊ ΠΈ остаСтся асинхронной с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°. ΠœΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ: ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ изобраТСния Π³Π»Π°Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π½Π΅ блокируСтся.

3. Π‘Ρ€Π°Π·Ρƒ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, ΠΌΡ‹ синхронно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (см. Ρ€Π°Π·Π΄Π΅Π» 7.4), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС.

ΠšΠ°Ρ€ΠΊΠ°Ρ для ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ прост:


β€” (void) viewDidAppear:(BOOL)animated{

[super viewDidAppear: animated];

dispatch_queue_t concurrentQueue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);


dispatch_async(concurrentQueue, ^{


__block UIImage *image = nil;


dispatch_sync(concurrentQueue, ^{

/* Π—Π΄Π΅ΡΡŒ скачиваСтся ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. */

});


dispatch_sync(dispatch_get_main_queue(), ^{

/* Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈ Π΄Π΅Π»Π°Π΅ΠΌ это

Π² Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. */

});


});

}


Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΊ dispatch_sync, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ отобразится ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ послС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ синхронного Π²Ρ‹Π·ΠΎΠ²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обСспСчиваСт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ изобраТСния. ИмСнно этого ΠΌΡ‹ ΠΈ добивались, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ загрузится ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого ΠΌΡ‹ смоТСм ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π˜Ρ‚Π°ΠΊ, послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ скачивания изобраТСния ΠΌΡ‹ выполняСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π±Π»ΠΎΠΊΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ Π½Π° этот Ρ€Π°Π· β€” Π² Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ.

Π‘ΠΊΠ°Ρ‡Π°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π΅Π³ΠΎ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π­Ρ‚ΠΎ ΠΌΡ‹ сдСлаСм Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ экзСмпляра viewDidAppear:, относящСмся ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ Π²ΠΈΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ отобраТаСтся Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ для iPhone:


β€” (void) viewDidAppear:(BOOL)paramAnimated{

[super viewDidAppear: paramAnimated];


dispatch_queue_t concurrentQueue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);


dispatch_async(concurrentQueue, ^{


__block UIImage *image = nil;


dispatch_sync(concurrentQueue, ^{

/* Π—Π΄Π΅ΡΡŒ скачиваСтся ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. */


/* Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ iPad с сайта Apple. Π“ипСрссылка слишком длинная,

поэтому Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ строки. */

NSString *urlAsString = @"http://images.apple.com/mobileme/features"\

Β«/images/ipad_findyouripad_201 00518.jpgΒ»;


NSURL *url = [NSURL URLWithString: urlAsString];


NSURLRequest *urlRequest = [NSURLRequest requestWithURL: url];


NSError *downloadError = nil;

NSData *imageData = [NSURLConnection

sendSynchronousRequest: urlRequest

returningResponse: nil

error:&downloadError];


if (downloadError == nil &&

imageData!= nil){


image = [UIImage imageWithData: imageData];

/* Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρƒ нас Π΅ΡΡ‚ΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. */


}

else if (downloadError!= nil){

NSLog(@"Error happened = %@", downloadError);

} else {

NSLog(@"No data could get downloaded from the URL.");

}


});


dispatch_sync(dispatch_get_main_queue(), ^{

/* Π—Π΄Π΅ΡΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° отобраТаСтся, ΠΈ это происходит Π² Π³Π»Π°Π²Π½ΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. */


if (image!= nil){

/* Π—Π΄Π΅ΡΡŒ создаСтся Π²ΠΈΠ΄ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. */

UIImageView *imageView = [[UIImageView alloc]

initWithFrame: self.view.bounds];


/* Π—Π°Π΄Π°Π΅ΠΌ характСристики изобраТСния. */

[imageView setImage: image];


/* Π£Π±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. */

[imageView setContentMode: UIViewContentModeScaleAspectFit];


/* Π”обавляСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊ Π²ΠΈΠ΄Ρƒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Π²ΠΈΠ΄Π°. */

[self.view addSubview: imageView];


} else {

NSLog(@"Image isn't downloaded. Nothing to display.");

}


});


});


}


Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° рис. 7.2, ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ создали Π²ΠΈΠ΄ изобраТСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚ прСдставлСна ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π² графичСском интСрфСйсС.


Рис. 7.2. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° изобраТСния ΠΈ дСмонстрация Π΅Π³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ, примСняСтся GCD


ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ массив ΠΈΠ· 10 000 случайных чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сохранСны Π² Ρ„Π°ΠΉΠ»Π΅ Π½Π° дискС. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΈ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ числа Π² порядкС возрастания (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ список начинался с наимСньшСго числа). ΠŸΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ список для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ управлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, опрСдСляСтся Ρ‚Π΅ΠΌ, для ΠΊΠ°ΠΊΠΎΠΉ систСмы Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’ случаС с iOS ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ экзСмпляр UITableView, Π° ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Mac OS X β€” экзСмпляр NSTableView. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массива Ρƒ нас Π΅Ρ‰Π΅ Π½Π΅Ρ‚, Π½Π°Ρ‡Π½Π΅ΠΌ с Π΅Π³ΠΎ создания, ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ этот массив, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ.

Π’ΠΎΡ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΌ Π½Π°ΠΉΡ‚ΠΈ мСсто Π½Π° дискС устройства, Π³Π΄Π΅ ΠΌΡ‹ собираСмся ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ массив ΠΈΠ· 10 000 случайных чисСл:


β€” (NSString *) fileLocation{


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ (-ΠΈ) Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. */

NSArray *folders =

NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,

NSUserDomainMask,

YES);


/* ΠœΡ‹ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ нашли? */

if ([folders count] == 0){

return nil;

}


/* ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³. */

NSString *documentsFolder = [folders objectAtIndex:0];


/* ΠŸΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»ΡΠ΅ΠΌ имя Ρ„Π°ΠΉΠ»Π° ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΠΏΡƒΡ‚ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. */

return [documentsFolder

stringByAppendingPathComponent:@"list.txt"];


}


β€” (BOOL) hasFileAlreadyBeenCreated{


BOOL result = NO;


NSFileManager *fileManager = [[NSFileManager alloc] init];

if ([fileManager fileExistsAtPath: [self fileLocation]]){

result = YES;

}


return result;

}


А Π²ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ΠΉ нюанс. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π° дискС массив ΠΈΠ· 10 000 случайных чисСл, Ссли, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΌΡ‹ Π½Π΅ создавали Ρ‚Π°ΠΊΠΎΠΉ массив Π½Π° дискС Ρ€Π°Π½ΡŒΡˆΠ΅. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ сразу Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ массив с диска. Если ΠΆΠ΅ ΠΏΡ€Π΅ΠΆΠ΄Π΅ ΠΌΡ‹ Π½Π΅ создавали этот массив Π½Π° дискС, Ρ‚ΠΎ сначала создадим Π΅Π³ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ массива с диска. Π’ ΠΈΡ‚ΠΎΠ³Π΅, Ссли считываниС массива с диска ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, ΠΌΡ‹ отсортируСм этот массив Π² порядкС возрастания ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² графичСском интСрфСйсС. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ отобраТСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΡΡ‚Π°Π²Π»ΡΡŽ Π²Π°ΠΌ для ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹.


β€” (void) viewDidAppear:(BOOL)paramAnimated{


[super viewDidAppear: paramAnimated];


dispatch_queue_t concurrentQueue =

dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);


/* Π•сли ΠΌΡ‹ Π΅Ρ‰Π΅ Π½Π΅ ΠΎΡ‚сортировали массив ΠΈΠ· 10 000 ΡΠ»ΡƒΡ‡Π°ΠΉΠ½Ρ‹Ρ… чисСл

Π½Π° дискС Ρ€Π°Π½Π΅Π΅, сгСнСрируСм эти числа сСйчас, Π° ΠΏΠΎΡ‚ΠΎΠΌ сохраним

ΠΈΡ… Π½Π° Π΄ΠΈΡΠΊ Π² массивС. */

dispatch_async(concurrentQueue, ^{


NSUInteger numberOfValuesRequired = 10000;


if ([self hasFileAlreadyBeenCreated] == NO){

dispatch_sync(concurrentQueue, ^{


NSMutableArray *arrayOfRandomNumbers =

[[NSMutableArray alloc] initWithCapacity: numberOfValuesRequired];


NSUInteger counter = 0;

for (counter = 0;

counter < numberOfValuesRequired;

counter++){

unsigned int randomNumber =

arc4random() % ((unsigned int)RAND_MAX + 1);

[arrayOfRandomNumbers addObject:

[NSNumber numberWithUnsignedInt: randomNumber]];

}


/* Π’Π΅ΠΏΠ΅Ρ€ΡŒ записываСм массив Π½Π° Π΄ΠΈΡΠΊ. */

[arrayOfRandomNumbers writeToFile: [self fileLocation]

atomically: YES];


});

}


__block NSMutableArray *randomNumbers = nil;


/* Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π΅ΠΌ числа с диска ΠΈ сортируСм ΠΈΡ… Π² порядкС возрастания. */

dispatch_sync(concurrentQueue, ^{


/* Π•сли Ρ„Π°ΠΉΠ» Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ создан, занимаСмся Π΅Π³ΠΎ считываниСм. */

if ([self hasFileAlreadyBeenCreated]){

randomNumbers = [[NSMutableArray alloc]

initWithContentsOfFile: [self fileLocation]];


/* Π’Π΅ΠΏΠ΅Ρ€ΡŒ сортируСм числа. */

[randomNumbers sortUsingComparator:

^NSComparisonResult(id obj1, id obj2) {