/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π·Π΄Π΅ΡΡ ΡΠΈΠΊΠ» while, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Π»ΠΈΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅,
ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ taskIsFinished ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² YES
ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΡΠΌΠ΅Π½ΡΠ΅ΡΡΡ. */
while (taskIsFinished == NO &&
[self isCancelled] == NO){
/* ΠΠ΄Π΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΠ°. */
NSLog(@"%s", __FUNCTION__);
NSLog(@"Parameter Object = %@", givenObject);
NSLog(@"Main Thread = %@", [NSThread mainThread]);
NSLog(@"Current Thread = %@", [NSThread currentThread]);
/* ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ. ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΉΡΠΈ ΠΈΠ· ΡΠΈΠΊΠ»Π°, ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ
ΡΠΎΠ±Π»ΡΠ΄Π°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΡΠΌΠ΅Π½ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. */
taskIsFinished = YES;
}
/* Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ KVO. ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ KVO. */
[self willChangeValueForKey:@"isFinished"];
[self willChangeValueForKey:@"isExecuting"];
finished = YES;
executing = NO;
[self didChangeValueForKey:@"isFinished"];
[self didChangeValueForKey:@"isExecuting"];
}
}
@catch (NSException * e) {
NSLog(@"Exception %@", e);
}
}
β (BOOL) isConcurrent{
return YES;
}
@end
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² Π΄Π΅Π»Π΅Π³Π°ΡΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ Π΄Π΅Π»Π΅Π³Π°ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΡΠ΅ΡΡΡ ΡΡΠΎΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌΡΠΉ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ:
@interface AppDelegate ()
@property (nonatomic, strong) NSOperationQueue *operationQueue;
@property (nonatomic, strong) SimpleOperation *firstOperation;
@property (nonatomic, strong) SimpleOperation *secondOperation;
@end
@implementation AppDelegate
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π΅Π»Π΅Π³Π°ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ²Π°:
β (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSNumber *firstNumber = @111;
NSNumber *secondNumber = @222;
self.firstOperation = [[SimpleOperation alloc]
initWithObject: firstNumber];
self.secondOperation = [[SimpleOperation alloc]
initWithObject: secondNumber];
self.operationQueue = [[NSOperationQueue alloc] init];
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. */
[self.operationQueue addOperation: self.firstOperation];
[self.operationQueue addOperation: self.secondOperation];
NSLog(@"Main thread is here");
self.window = [[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
Π ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΎΡΠΎΠ±ΡΠ°Π·ΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅ β ΡΠ΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π»ΠΈ ΠΏΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ:
Main thread is here
-[SimpleOperation main]
-[SimpleOperation main]
Parameter Object = 222
Parameter Object = 222
Main Thread = <NSThread: 0x68 10260>{name = (null), num = 1}
Main Thread = <NSThread: 0x68 10260>{name = (null), num = 1}
Current Thread = <NSThread: 0x6a10b90>{name = (null), num = 3}
Current Thread = <NSThread: 0x6a13f50>{name = (null), num = 4}
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π»Ρ 7.11 ΠΈ 7.15.
7.13. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ B ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉΡΡ Π² Π½Π΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ A Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΡΠ²ΠΎΡ Π·Π°Π΄Π°ΡΡ, ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ B Π΄ΠΎΠ»ΠΆΠ½Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ ΡΠ΅Π±Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ A Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° addDependency:, ΠΎΡΠ½ΠΎΡΡΡΠ΅Π³ΠΎΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ NSOperation:
[self.firstOperation addDependency: self.secondOperation];
Π‘Π²ΠΎΠΉΡΡΠ²Π° firstOperation ΠΈ secondOperation ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠΈΠΏΡ NSInvocationOperation, ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΌ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅ Β«ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅Β» Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΏΠ΅ΡΠ²Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠ°ΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° Π·Π°Π΄Π°ΡΠ° Π²ΡΠΎΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½Ρ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½Π° Π·Π°Π²ΠΈΡΠΈΡ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ.
ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π²Π½Π΅Π΄ΡΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 7.12, ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π΅Π»Π΅Π³Π°ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° addDependency:, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ²Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠΆΠ΄Π°Π»Π°ΡΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠΎΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ:
#import Β«AppDelegate.hΒ»
@interface AppDelegate ()
@property (nonatomic, strong) NSInvocationOperation *firstOperation;
@property (nonatomic, strong) NSInvocationOperation *secondOperation;
@property (nonatomic, strong) NSOperationQueue *operationQueue;
@end
@implementation AppDelegate
β (void) firstOperationEntry:(id)paramObject{
NSLog(@"First Operation β Parameter Object = %@",
paramObject);
NSLog(@"First Operation β Main Thread = %@",
[NSThread mainThread]);
NSLog(@"First Operation β Current Thread = %@",
[NSThread currentThread]);
}
β (void) secondOperationEntry:(id)paramObject{
NSLog(@"Second Operation β Parameter Object = %@",
paramObject);
NSLog(@"Second Operation β Main Thread = %@",
[NSThread mainThread]);
NSLog(@"Second Operation β Current Thread = %@",
[NSThread currentThread]);
}
β (BOOL) application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
NSNumber *firstNumber = @111;
NSNumber *secondNumber = @222;
self.firstOperation = [[NSInvocationOperation alloc]
initWithTarget: self
selector:@selector(firstOperationEntry:)
object: firstNumber];
self.secondOperation = [[NSInvocationOperation alloc]
initWithTarget: self
selector:@selector(secondOperationEntry:)
object: secondNumber];
[self.firstOperation addDependency: self.secondOperation];
self.operationQueue = [[NSOperationQueue alloc] init];
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. */
[self.operationQueue addOperation: self.firstOperation];
[self.operationQueue addOperation: self.secondOperation];
NSLog(@"Main thread is here");
self.window = [[UIWindow alloc] initWithFrame:
[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π² ΠΎΠΊΠ½Π΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
Second Operation β Parameter Object = 222
Main thread is here
Second Operation β Main Thread = <NSThread: 0x68 10250>{name = (null),
num = 1}
Second Operation β Current Thread = <NSThread: 0x6836ab0>{name = (null),
num = 3}
First Operation β Parameter Object = 111
First Operation β Main Thread = <NSThread: 0x68 10250>{name = (null),
num = 1}
First Operation β Current Thread = <NSThread: 0x6836ab0>{name = (null),
num = 3}
ΠΠΏΠΎΠ»Π½Π΅ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ, Ρ ΠΎΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π²Π΅ΡΡΠΈ ΠΎΠ±Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΠ΅ΡΠ²Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠΎΡΠΎΠΉ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π²ΡΠΎΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ, ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ²Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
ΠΡΠ»ΠΈ Π²Ρ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΡΠ΅ ΡΠ°Π·ΠΎΡΠ²Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° removeDependency:, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΌΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π» 7.12.
7.14. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠ²
ΠΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ
Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π·Π°Π΄Π°ΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π²ΠΈΠ΄ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΠΏΠΎΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠΌ:
β (void) paint:(NSTimer *)paramTimer{
/* ΠΠ΅Π»Π°Π΅ΠΌ Π·Π΄Π΅ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ. */
NSLog(@"Painting");
}
β (void) startPainting{
self.paintingTimer = [NSTimer
scheduledTimerWithTimeInterval:1.0
target: self
selector:@selector(paint:)
userInfo: nil
repeats: YES];
}
β (void) stopPainting{
if (self.paintingTimer!= nil){
[self.paintingTimer invalidate];
}
}
β (void)applicationWillResignActive:(UIApplication *)application{
[self stopPainting];
}
β (void)applicationDidBecomeActive:(UIApplication *)application{
[self startPainting];
}
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠ΅ΡΠΎΠ΄ invalidate Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ ΡΠ°ΠΌ ΠΈ Π½Π°ΠΌ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π²ΡΡΡΠ½ΡΡ. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ paintingTimer, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ (.h-ΡΠ°ΠΉΠ»Π΅):