рдбреЗрд╡рд▓рдкрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╢реНрдирд╛рд╡рд▓реА рднрд░рддреЗ рд╕рдордп
, iOS рдХреЗ рд▓рд┐рдП Yandex.Musics рдХреЛ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдЦреБрд▓реЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдФрд░ рдирд┐рд░реНрдгрдп рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реИред
рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рд╢реНрди 1. рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд▓реЙрдЧрд┐рди рдкреНрд░рд╛рд░реВрдк рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ: рдпрд╣ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдореЗрдВ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░, рд╕рдВрдЦреНрдпрд╛, рдЕрд╡рдзрд┐ рдФрд░ рдорд┐рдирдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░ рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдиреНрдпреВрдирддрдо рд▓реЙрдЧрд┐рди рд▓рдВрдмрд╛рдИ 1 рд╡рд░реНрдг рд╣реИред рдЕрдзрд┐рдХрддрдо - 20 рд╡рд░реНрдгред
рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрд╕ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
рд╣рдо рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред NSRegularExpression рд╡рд░реНрдЧ iOS 4.0 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред
BOOL loginTester(NSString* login) { NSError *error = NULL; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\A[a-zA-Z](([a-zA-Z0-9\\.\\-]{0,18}[a-zA-Z0-9])|[a-zA-Z0-9]){0,1}\\z" options:NSRegularExpressionCaseInsensitive error:&error];
рдпрд╣рд╛рдВ рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдПрдХ рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдЬреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдбрд░рддреЗ рд╣реИрдВред
рдкреНрд░рд╢реНрди 2. рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВ рдЬреЛ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдПрди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрджреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░реЛрдЪрдХред
-(NSArray*)mostFrequentWordsInString:(NSString*)string count:(NSUInteger)count {
рдпрджрд┐ рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╣рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдмрд╢рд░реНрддреЗ рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдПрдЧрд╛ рдФрд░ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЖрдХрд╛рд░ рдХрдИ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рдзрд╛рд░рдгрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рдЕрдиреНрдпрдерд╛, рдЗрдирдкреБрдЯ рдкрд░ рдХреЛрдИ рд░реЗрдЦрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдПрдХ рдлрд╝рд╛рдЗрд▓ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдбрд╝реЗ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде, рдЖрдкрдХреЛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд╕рд░рдгреА рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдкрд╕реАрдирд╛ рдмрд╣рд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рднрд╛рд╖рд╛ рдкрд░ рдмрд╣реБрдд рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ - рд░реВрд╕реА рдХреЗ рд▓рд┐рдП рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдЪреАрдиреА рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЧреЗ рдХреЗ рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ - рд╕реАрдзрд╛ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рднреА рджрд┐рдорд╛рдЧ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╢рдмреНрдж рдЪреБрдирдирд╛ рдерд╛ - рдпрд╣ рд╣реИ рдлрд╛рд╕реНрдЯ рдореЗрдЬреЛрд░рд┐рдЯреА рд╡реЛрдЯрд┐рдВрдЧред рд▓реЗрдХрд┐рди рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдкреВрд░реА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдореВрд▓реНрдп рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрди рдорд╛рди рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдВрд╢реЛрдзрди рдореБрдЭреЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред
рдкреНрд░рд╢реНрди 3. NSURLConnection рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, HTTP рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦреЗрдВред рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреАрдЬрд┐рдПред
-(void)pullTextFromURLString:(NSString*)urlString completion:(void(^)(NSString*text))callBack { NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString:urlString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { if (error) { NSLog(@"Error %@", error.localizedDescription); } else {
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╢рд╛рдпрдж, рдкрд╣рд▓реЗ рдкреНрд░рд╢реНрди рдХреА рддрд░рд╣, рдпрд╣ рдкреНрд░рд╢реНрди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ / рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рд╣реИред
рдкреНрд░рд╢реНрди 4. рдиреАрдЪреЗ рджреА рдЧрдИ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВред рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдВред
NSOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ for (int i = 0; i < 1000; ++i) { if ([operation isCancelled]) return; process(data[i]); } }]; [queue addOperation:operation];
рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдмреНрд▓реЙрдХ рдмрдирд╛рддреЗ рд╕рдордп рдмреНрд▓реЙрдХ рджреНрд╡рд╛рд░рд╛ "рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП" рдСрдкрд░реЗрд╢рди рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдЕрднреА рддрдХ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред "рдХреИрдкреНрдЪрд░" рдХреЗ рд╕рдордп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдХрд┐рд╕реА рдХреНрд▓рд╛рд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдпрд╛ рдХрд┐рд╕реА рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЙрддреНрдкрдиреНрди рдХреЛрдб рднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реЛ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдХреИрд╕реЗ рдирд┐рдХрд▓реЗрдВ? рдЗрд╕рд▓рд┐рдП:
NSBlockOperation *operation = [[NSBlockOperation alloc] init]; [operation addExecutionBlock:^{ for (int i = 0; i < 1000; ++i) { if ([operation isCancelled]) return; process(data[i]); } }]; [queue addOperation:operation];
рд╢рд╛рдпрдж рдпрд╣ рд╕рд┐рд░реНрдл __рдмреЛрд▓ рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдСрдкрд░реЗрд╢рди рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХреЛрдб рдореЗрдВ рд╣реИ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рдХреБрдЫ рднреА рдСрдкрд░реЗрд╢рди рдЪрд░ рдХреА __weak рдкреНрд░рддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдЪрд░ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдмреНрд▓реЙрдХ рдХрд╛ рдЬреАрд╡рдирдХрд╛рд▓ рдЬреНрдЮрд╛рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред рдЦреИрд░, рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЬрдЯрд┐рд▓ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рдХреЗ рд▓рд┐рдП NSBlockOperation рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдХреЛрдИ рдЙрдЪрд┐рдд рддрд░реНрдХ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ - рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рдорд╛рдорд▓рд╛ред
рдЗрд╕ рдХреЛрдб рдореЗрдВ рдФрд░ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рдореБрдЭреЗ рдХреЛрдб рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореИрдЬрд┐рдХ рдХрд╛рдВрд╕реНрдЯреЗрдВрдЯ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИрдВ рдФрд░ 1000 рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдбрд┐рдлрд╛рдЗрди, рдХрд╛рд╕реНрдЯ, рд╕рд╛рдЗрдЬрд╝реЛрдлрд╝ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдСрдмреНрдЬреЗрдХреНрдЯрд┐рд╡-рд╕реА рдореЗрдВ рд▓рдВрдмреЗ рдЪрдХреНрд░реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдСрдЯреЛрд░реЗрд▓реНрдб рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдкреНрд░реЛрд╕реЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдРрд╕реЗ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╡рд┐рдзрд┐ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдХреЙрд▓ рдХреЛ @autoreceasepool {} рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛ред рд▓реВрдк рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдПрдХ рдирдпрд╛ рдкреВрд▓ рдмрдирд╛рдирд╛ рдУрд╡рд░рд╣реЗрдб рдпрд╛ рдирд┐рд░рд░реНрдердХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ ARC рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ NSAutoreleasePool рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ, рдПрдХ рд▓реВрдк рдХреЗ 10 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВред рдпрджрд┐ рдПрдЖрд░рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╡реИрд╕реЗ, рдПрдЖрд░рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рд╢рд╛рдпрдж рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рд╣реИред
рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдбреЗрдЯрд╛ рдмрджрд▓рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХрд┐рд╕реА рдЕрдиреНрдп рдзрд╛рдЧреЗ рд╕реЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВ рдбреЗрдЯрд╛ рдХреА рдЕрдирдиреНрдп рдкрд╣реБрдВрдЪ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддреА рд╣реИ рдЬрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдкрдХреЛ рддрд╛рд▓реЗ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдкреНрд░рд╢реНрди 5. рдЯреЗрдмрд▓ рд╣реИрдВ:
CREATE TABLE tracks ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, PRIMARY KEY (id) )
CREATE TABLE track_downloads ( download_id BIGINT(20) NOT NULL AUTO_INCREMENT, track_id INT NOT NULL, download_time TIMESTAMP NOT NULL DEFAULT 0, ip INT NOT NULL, PRIMARY KEY (download_id) )
рдПрдХ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦреЗрдВ рдЬреЛ 1000 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдкрдЯрд░рд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рд▓реМрдЯрд╛рддреА рд╣реИред
рдпрд╣рд╛рдБ рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реИ рдХрд┐ рдПрдХ рдорд╣рд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
select name from tracks where id in (select track_id from (select track_id, count(*) as track_download_count from track_downloads group by track_id order by track_download_count desc) where track_download_count > 1000)
Sqlite рдореЗрдВ рдЬрд╛рдБрдЪ рдХреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЪрдпрди рдХреЛ рдХрдо рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреИрд╕реЗред
рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИ - рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрд╡реЗрджрди рдХрд░реЗрдЧрд╛ред
рдЖрд▓реЛрдЪрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИред