β (void) paint:(NSTimer *)paramTimer{
/* Π§ΡΠΎ-ΡΠΎ Π·Π΄Π΅ΡΡ Π΄Π΅Π»Π°Π΅ΠΌ. */
NSLog(@"Painting");
}
ΠΠ°Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π΄Π°Π΅Ρ Π½Π°ΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ°ΠΉΠΌΠ΅Ρ, Π·Π°ΠΏΡΡΠΊΠ°ΡΡΠΈΠΉ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π΅ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ°ΠΉΠΌΠ΅ΡΠ° β Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ invalidate. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ userInfo ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° NSTimer, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠΌ (Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠΌΠ΅Π΅ΡΡΡ). ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π΅Π»ΠΎ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ NSTimer, Π·Π°ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°ΠΉΠΌΠ΅ΡΡ Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
7.15. ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΌΠ½ΡΠ΅ ΡΠ°ΡΡΠ΅ΡΡ, Π·Π°ΡΡΠ΅Π±ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, Π½ΠΎ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ β ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° β Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΡ Π·Π°Π΄Π°Ρ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
β (void) downloadNewFile:(id)paramObject{
@autoreleasepool {
NSString *fileURL = (NSString *)paramObject;
NSURL *url = [NSURL URLWithString: fileURL];
NSURLRequest *request = [NSURLRequest requestWithURL: url];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *downloadedData =
[NSURLConnection sendSynchronousRequest: request
returningResponse:&response
error:&error];
if ([downloadedData length] > 0){
/* ΠΠ°Π³ΡΡΠ·ΠΊΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½Π°. */
} else {
/* ΠΠΈΡΠ΅Π³ΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ. ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Error. */
}
}
}
β (void)viewDidLoad {
[super viewDidLoad];
NSString *fileToDownload = @"http://www.OReilly.com";
[NSThread detachNewThreadSelector:@selector(downloadNewFile:)
toTarget: self
withObject: fileToDownload];
}
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΡΠ±ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ iOS ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ iOS 5 Ρ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ Π²ΠΈΠ΄Π° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΎ ΠΏΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ²ΡΠ·Π°Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΠ»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ΡΡ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ. ΠΡΠΎΡ ΠΏΠΎΡΠΎΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΈ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΡΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ΅ΠΌΡ ΡΠΈΠΊΠ»Ρ.
Π§ΡΠΎΠ±Ρ ΠΎΡΠ΅Π½ΠΈΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΡΠΈ ΡΠΈΠΊΠ»Π°:
β (void) firstCounter{
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"First Counter = %lu", (unsigned long)counter);
}
}
β (void) secondCounter{
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"Second Counter = %lu", (unsigned long)counter);
}
}
β (void) thirdCounter{
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"Third Counter = %lu", (unsigned long)counter);
}
}
ΠΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ, ΠΏΡΠ°Π²Π΄Π°? ΠΡΠ΅ ΡΠΈΠΊΠ»Ρ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ ΠΎΡ 0 Π΄ΠΎ 1000, Π²ΡΠ²ΠΎΠ΄Ρ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΠ΅ΡΡΠΈΠΊΠΎΠ². Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΈ ΡΡΠ΅ΡΡΠΈΠΊΠΈ:
β (void) viewDidLoad{
[super viewDidLoad];
[self firstCounter];
[self secondCounter];
[self thirdCounter];
}
ΠΡΠΎΡ ΠΊΠΎΠ΄ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ viewDidLoad ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° Π²ΠΈΠ΄Π°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΎΠΊΠ½ΠΎ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊ ΡΠ½Π°ΡΠ°Π»Π° ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠ΅ΡΡΠΈΠΊ, ΠΏΠΎΡΠΎΠΌ Π²ΡΠΎΡΠΎΠΉ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΡΡΠ΅ΡΠΈΠΉ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΡΠΈΠΊΠ»Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ΅ΡΡΠΈΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΎΡΠ½ΠΎΡΡΡΠ΅Π³ΠΎΡΡ ΠΊ ΠΏΠΎΡΠΎΠΊΡ, ΠΏΠΎΠΊΠ° ΡΡΠΎΡ ΡΡΠ΅ΡΡΠΈΠΊ Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ²ΠΎΠΉ ΡΠΈΠΊΠ».
Π ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ Π·Π°Ρ ΠΎΡΠ΅Π»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π²ΡΠ΅ ΡΡΠ΅ΡΡΠΈΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ? Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠΎ ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡΠ΅! ΠΡ Π²Π΅Π΄Ρ ΡΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, ΡΡΠΎ ΠΏΡΡΠΌΠΎ ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄Π»Ρ Π½Π°Ρ ΠΏΠΎΡΠΎΠΊΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Π΅ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΆΠ΅ ΡΡΠΏΠ΅Π»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π±Ρ ΠΎΠ½ Π½ΠΈ Π±ΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½, ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΡΠ°ΠΊ, ΠΌΡ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠ², Π° ΡΡΠ΅ΡΠΈΠΉ ΡΡΠ΅ΡΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅:
β (void) firstCounter{
@autoreleasepool {
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"First Counter = %lu", (unsigned long)counter);
}
}
}
β (void) secondCounter{
@autoreleasepool {
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"Second Counter = %lu", (unsigned long)counter);
}
}
}
β (void) thirdCounter{
NSUInteger counter = 0;
for (counter = 0;
counter < 1000;
counter++){
NSLog(@"Third Counter = %lu", (unsigned long)counter);
}
}
β (void)viewDidLoad {
[super viewDidLoad];
[NSThread detachNewThreadSelector:@selector(firstCounter)
toTarget: self
withObject: nil];
[NSThread detachNewThreadSelector:@selector(secondCounter)
toTarget: self
withObject: nil];
/* ΠΡΠΎΡ ΠΊΠΎΠ΄ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. */
[self thirdCounter];
}
Π£ ΠΌΠ΅ΡΠΎΠ΄Π° thirdCounter Π½Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠ»Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π½ΠΎΠ²ΠΎΠΌ ΠΎΡΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΌ ΠΏΡΠ»ΠΎΠΌ. ΠΠ°Π½Π½ΡΠΉ ΠΏΡΠ» ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Cocoa Touch.
ΠΠ»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½ΡΡ ΠΊΠΎΠ΄Π° ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ Π²ΡΠ·ΠΎΠ²Ρ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΠ° detachNewThreadSelector, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ΅ΡΡΠΈΠΊΠΎΠ² Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ . Π’Π΅ΠΏΠ΅ΡΡ, Π·Π°ΠΏΡΡΡΠΈΠ² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π² ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄:
Second Counter = 921
Third Counter = 301
Second Counter = 922
Second Counter = 923
Second Counter = 924
First Counter = 956
Second Counter = 925
First Counter = 957
Second Counter = 926
First Counter = 958
Third Counter = 302
Second Counter = 927
Third Counter = 303
Second Counter = 928
ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²ΡΠ΅ ΡΡΠΈ ΡΡΠ΅ΡΡΠΈΠΊΠ° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΈΡ Π²ΡΠ²ΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΠΆΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΡΠ». ΠΠ½ΡΡΡΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠ»Π° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ Π²Π΅ΡΡ ΠΏΡΠ». ΠΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡΡΡ Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠΎΠΌ ΡΡΡΠ»ΠΎΠΊ Π² ΡΠ°ΠΊΠΈΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡΡ , ΠΊΠ°ΠΊ Cocoa Touch, ΡΠΎ Π΅ΡΡΡ Π² ΡΡΠ΅Π΄Π°Ρ , Π³Π΄Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΌΠΎΠ³ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ. ΠΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΏΡΠΈ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°Π²Π½ΡΠΌ 1. ΠΡΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ°ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠ΅, ΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ°Π²Π½ΡΠΌ 1, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΊΠ°ΠΊ Π²ΡΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΡ ΠΏΡΠ», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠ»Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ release. ΠΡΠ»ΠΈ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠ°ΠΊ ΠΈ ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΠ°Π²Π½ΡΠΌ 1, ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ.
Π ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ ΠΏΡΠ», ΠΏΡΠΈΡΠ΅ΠΌ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ°ΠΌΡΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΡΠ»ΠΈ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΎ Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ Π² ΠΏΠΎΡΠΎΠΊΠ΅ Π½Π° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ. Π§ΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:
β (void) autoreleaseThread:(id)paramSender{
NSBundle *mainBundle = [NSBundle mainBundle];
NSString *filePath = [mainBundle pathForResource:@"AnImage"
ofType:@"png"];
UIImage *image = [UIImage imageWithContentsOfFile: filePath];
/* ΠΠ΅Π»Π°Π΅ΠΌ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. */
NSLog(@"Image = %@", image);
}
β (void)viewDidLoad {
[super viewDidLoad];
[NSThread detachNewThreadSelector:@selector(autoreleaseThread:)
toTarget: self
withObject: self];
}
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΈ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΠΎΠΊΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅: