{"id":204356,"date":"2014-03-12T15:58:04","date_gmt":"2014-03-12T11:58:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=204356"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=204356","title":{"rendered":"<span class=\"post_title\">Objective-c \u0431\u043b\u043e\u043a\u0438 \u0438 c++ \u043b\u044f\u043c\u0431\u0434\u044b<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043b\u044e\u0434\u044f\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043b\u044f\u043c\u0431\u0434\u0430\u043c\u0438 C++, \u043d\u043e \u0445\u043e\u0442\u044f\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 Objective-C \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. <br \/>  \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0441\u0442\u0432\u0438\u0435 \u043b\u044f\u043c\u0431\u0434 \u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<br \/>  \u0412\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f Apple LLVM Compiler 4.2 (Clang). \u0414\u043b\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e Obj-C \u043a\u043e\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ARC, \u0442.\u043a \u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0441\u044c \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 non-ARC \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ARC. <br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h4>\u0420\u0430\u0437\u0434\u0435\u043b\u044b:<\/h4>\n<p>  <\/p>\n<ol>\n<li><a href=\"#Syntacs\">\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/a><\/li>\n<li><a href=\"#Context\">\u0417\u0430\u0445\u0432\u0430\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/a><\/li>\n<li><a href=\"#MemoryManagement\">\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/a><\/li>\n<li><a href=\"#ObjCpp\">Objective-C++<\/a><\/li>\n<\/ol>\n<p>  <b>\u0411\u043b\u043e\u043a\u0438 \u0432 Objective-C <\/b> \u2014 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">\u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439 [2]<\/a>. \u0411\u043b\u043e\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 (\u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0441\u0442\u0435\u043a\u043e\u0432\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435-\u0447\u043b\u0435\u043d\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432). \u0411\u043b\u043e\u043a\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438 \u043b\u044f\u043c\u0431\u0434\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 C++.<\/p>\n<p>  <b>\u041b\u044f\u043c\u0431\u0434\u044b \u0432 C++<\/b> \u2014 \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0431\u0435\u0437\u044b\u043c\u044f\u043d\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. <br \/>  <a name=\"Syntacs\"><\/a>  <\/p>\n<h4>\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/h4>\n<h5>Obj-C \u0431\u043b\u043e\u043a\u0438<\/h5>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/22b\/d0a\/eec\/22bd0aeec29ae16ba5a6bf46bdc7389e.png\"\/> <a href=\"https:\/\/developer.apple.com\/library\/ios\/documentation\/cocoa\/Conceptual\/Blocks\/Articles\/bxGettingStarted.html#\/\/apple_ref\/doc\/uid\/TP40007502-CH7-SW1\">[3]<\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">int multiplier = 7; int (^myBlock)(int) = ^(int num) { return num * multiplier;}; NSLog(@\u201d%d\u201d, myBlock(4)); \/\/ \u0432\u044b\u0432\u0435\u0434\u0435\u0442 28 <\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>^ \u2014 \u044d\u0442\u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043e \u0442\u043e\u043c \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u0430\u044f \u2014 \u0431\u043b\u043e\u043a<\/li>\n<li>int \u2014 \u0431\u043b\u043e\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0438\u043f\u0430 int, \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u0438\u043f\u0430 int<\/li>\n<li>multiplier \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u043d\u0430\u043c \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 (\u043e\u0431 \u044d\u0442\u043e\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u201c\u0417\u0430\u0445\u0432\u0430\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u201d)<\/li>\n<\/ul>\n<p>  <\/div>\n<\/div>\n<p>  \u0411\u043b\u043e\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.<br \/>  \u0411\u043b\u043e\u043a\u0438 \u0432 Objective-C \u0443\u0436\u0435 \u043f\u0440\u043e\u0447\u043d\u043e \u043d\u0430\u0448\u043b\u0438 \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u0430\u043a \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445 (Foundation, UIKit) \u0442\u0430\u043a \u0438 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 (<a href=\"https:\/\/github.com\/AFNetworking\/AFNetworking\">AFNetworking<\/a>, <a href=\"https:\/\/github.com\/zwaldowski\/BlocksKit\">BlocksKit<\/a>). <br \/>  \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0432\u0438\u0434\u0435 <a href=\"https:\/\/developer.apple.com\/library\/ios\/documentation\/cocoa\/conceptual\/ProgrammingWithObjectiveC\/CustomizingExistingClasses\/CustomizingExistingClasses.html\">\u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438<\/a> \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/developer.apple.com\/library\/mac\/documentation\/Cocoa\/Reference\/Foundation\/Classes\/NSArray_Class\/NSArray.html\">NSArray<\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u043b\u043e\u043a\u0430 \u0432 NSArray<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\"> \/\/ \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 @implementation NSArray (Blocks) \/\/ \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0443 - (NSArray*)subarrayWithPredicate:(BOOL(^)(id object, NSUInteger idx, BOOL *stop))predicte {     NSMutableArray *resultArray = [NSMutableArray array];     BOOL shouldStop = NO;     for (id object in self) {         if (predicte(object, [self indexOfObjectIdenticalTo:object], &shouldStop)) {             [resultArray addObject:object];         }         if (shouldStop) {             break;         }     }     return [[resultArray copy] autorelease]; } @end  \/\/ \u0433\u0434\u0435-\u0442\u043e \u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u043c \u043a\u043e\u0434\u0435     NSArray *numbers = @[@(5), @(3), @(8), @(9), @(2)];     NSUInteger divisor = 3;     NSArray *divisibleArray = [numbers subarrayWithPredicate:^BOOL(id object, NSUInteger idx, BOOL *stop) {         BOOL shouldAdd = NO;         \/\/ \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0447\u0438\u0441\u043b\u0430 \u043a\u0440\u0430\u0442\u043d\u044b\u0435 3         NSAssert([object isKindOfClass:[NSNumber class]], @&quot;object != number&quot;);         \/\/ \u043e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e divisor \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430         if ([(NSNumber *)object intValue] % divisor == 0) {             shouldAdd = YES;         }         return shouldAdd;     }];     NSLog(@&quot;%@&quot;, divisibleArray); \/\/ \u0432\u044b\u0432\u0435\u0434\u0435\u0442 3, 9 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0432 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f AFNetworking, \u0434\u0430 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0432 <a href=\"https:\/\/developer.apple.com\/library\/mac\/documentation\/Performance\/Reference\/GCD_libdispatch_Ref\/Reference\/reference.html\">GCD<\/a> \u2014 \u043e\u0434\u043d\u043e \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435. <br \/>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0438\u043f\u044b \u0431\u043b\u043e\u043a\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0431\u043b\u043e\u043a\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">typedef int (^MyBlockType)(int number, id object); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<h5>\u0421++ \u043b\u044f\u043c\u0431\u0434\u044b<\/h5>\n<p>  \u0422\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0432\u0438\u0434\u0435 \u043b\u044f\u043c\u0431\u0434\u044b<br \/>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/7e2\/435\/a0c\/7e2435a0ce1da69e48b6ce54f0165594.png\"\/><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/vstudio\/dd293603.aspx\">[11]<\/a>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int multiplier = 7; auto lambda = [&multiplier](int num) throw() -&gt; int {      return multiplier * num; }; lambda(4); \/\/ \u0440\u0430\u0432\u043d\u043e 28 <\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li><code>[]<\/code> \u2014 \u043d\u0430\u0447\u0430\u043b\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u044f\u043c\u0431\u0434\u044b, \u0432\u043d\u0443\u0442\u0440\u0438 \u2014 \u0437\u0430\u0445\u0432\u0430\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/li>\n<li><code>&multiplier<\/code> \u2014 \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (<code>&<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u0430 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435)<\/li>\n<li><code>int<\/code> \u2014 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<\/li>\n<li><code>mutable<\/code> \u2014 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e <\/li>\n<li><code>throw()<\/code> \u2014 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043b\u044f\u043c\u0431\u0434\u0430 \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043d\u0430\u0440\u0443\u0436\u0443<\/li>\n<\/ul>\n<p>  <\/div>\n<\/div>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434\u044b<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0438\u0437 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u043f\u043e \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442\u0443<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">template&lt;class InputCollection, class UnaryPredicate&gt; void subset(InputCollection& inputCollection, InputCollection& outputCollection, UnaryPredicate predicate) {     typename InputCollection::iterator iterator = inputCollection.begin();     for (;iterator != inputCollection.end(); ++iterator) {         if (predicate(*iterator)) {             outputCollection.push_back(*iterator);         }     }     return; }  int main(int argc, const char * argv[]) {         int divisor = 3;         std::vector&lt;int&gt; inputVector = {5, 3, 8, 9, 2};         std::vector&lt;int&gt; outputVector;         subset(inputVector, outputVector, [divisor](int number){return number % divisor == 0;});         \/\/ \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438         std::for_each( outputVector.begin(),                         outputVector.end(),                         [](const int& number){std::cout &lt;&lt; number &lt;&lt; std::endl;} ); }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <a name=\"Context\"><\/a>  <\/p>\n<h4>\u0417\u0430\u0445\u0432\u0430\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/h4>\n<p>  <\/p>\n<h5>Obj-C \u0431\u043b\u043e\u043a\u0438<\/h5>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0431\u043b\u043e\u043a\u0430\u0445, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043c\u044b \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u0432 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0431\u043b\u043e\u043a\u0430, \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>multiplier<\/code> (\u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043b\u044f\u043c\u0431\u0434\u044b, \u0432 \u043b\u044f\u043c\u0431\u0434\u0435 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c <code>[&] <\/code>\u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c, \u0438\u043b\u0438 <code>[=] <\/code>\u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e).<br \/>  \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0440\u0430\u043b\u0438 \u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u0432 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u043b\u0435 \u0431\u043b\u043e\u043a\u0430, \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c <code>__block<\/code><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043c\u0435\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">__block int first = 7; void (^myBlock2)(int) = ^(int second) { first += second;}; myBlock2(4); NSLog(@&quot;%d&quot;, first); \/\/ \u0432\u044b\u0432\u0435\u0434\u0435\u0442 11 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432 \u0431\u043b\u043e\u043a, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043a\u0430\u043a <code>__block<\/code> \u043d\u0435\u0442. \u0412\u0435\u0434\u044c \u043f\u043e \u0441\u0443\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u2014 \u043c\u044b \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043c\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">NSMutableArray *array = [NSMutableArray array]; void (^myBlock3)() = ^() { [array addObject:@&quot;someString&quot;];}; myBlock3(); \/\/ \u0434\u043e\u0431\u0430\u0432\u0438\u0442 someString \u0432 array <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041d\u043e \u0438\u043d\u043e\u0433\u0434\u0430, \u0432\u0441\u0435 \u0436\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>__block<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0443\u0442\u0435\u0447\u0435\u043a \u043f\u0430\u043c\u044f\u0442\u0438. (\u041e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u201c\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e\u201d) <\/p>\n<h5>\u0421++ \u043b\u044f\u043c\u0431\u0434\u044b<\/h5>\n<p>   \u0417\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 <a href=\"http:\/\/ru.cppreference.com\/w\/cpp\/language\/lambda\">[5]<\/a>, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a [ ]  <\/p>\n<ul>\n<li><code>[&]<\/code> \u2014 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/li>\n<li><code>[=]<\/code> \u2014 \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e<\/li>\n<li><code>[a, &b]<\/code> \u2014 <code>a<\/code> \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u0430 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, <code>b<\/code> \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u0430 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/li>\n<li><code>[]<\/code> \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u043e<\/li>\n<\/ul>\n<p>  \u041a \u0437\u0430\u0445\u0432\u0430\u0442\u0443 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <code>mutable<\/code>, \u043e\u043d \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c,<br \/>  \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043f\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.<\/p>\n<p>  <a name=\"MemoryManagement\"><\/a>  <\/p>\n<h4>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h4>\n<p>  <\/p>\n<h5> Obj-C \u0431\u043b\u043e\u043a\u0438<\/h5>\n<p>  \u0411\u043b\u043e\u043a\u0438 \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 (\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0438\u0442\u0432\u0438\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b \u0432 \u043a\u0443\u0447\u0443 (heap))<br \/>  \u0411\u043b\u043e\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 3-\u0445 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0439 <a href=\"http:\/\/www.youtube.com\/watch?v=SKot4tfsV24&amp;feature=em-uploademail\">[7]<\/a>.<\/p>\n<ol>\n<li>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 (\u0438\u0437 \u0441\u0442\u0435\u043a\u0430) \u0432\u043d\u0443\u0442\u0440\u0438 \u0431\u043b\u043e\u043a\u0430 \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f <code>NSGlobalBlock<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0432\u0438\u0434\u0435 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f <code>NSStackBlock<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u043e\u043c, \u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. <\/li>\n<li>\u0415\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>Block_copy<\/code>, \u0438\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448 \u0431\u043b\u043e\u043a \u0431\u044b\u043b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043a\u0443\u0447\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430: <code>@property (nonatomic, copy) MyBlockType myBlock;<\/code> \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 <code>NSMallocBlock<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438 \u043e\u0432\u043b\u0430\u0434\u0435\u0432\u0430\u0435\u0442 (\u043e\u0432\u043b\u0430\u0434\u0435\u0432\u0430\u0435\u0442 == \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 <code>retain<\/code>) \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435. \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0443\u0442\u0435\u0447\u043a\u0430\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u0435\u0441\u043b\u0438 \u0441 \u043d\u0438\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0411\u043b\u043e\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u044b \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f. \u0415\u0449\u0435 \u0432\u0430\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>property<\/code> \u0432 <code>NSMallocBlock<\/code> \u2014 \u0440\u0435\u0442\u0435\u0439\u043d\u0438\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0441\u0430\u043c\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442. <\/li>\n<\/ol>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0446\u0438\u043a\u043b\u0430 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f:<br \/>  \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442 <code>HTTP<\/code> \u0437\u0430\u043f\u0440\u043e\u0441 \u0441 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c <code>API PKHTTPReuquest<\/code><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f PKHTTPReuquest<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">typedef void (^PKHTTPRequestCompletionSuccessBlock)(NSString *responseString); typedef void (^PKHTTPRequestCompletionFailBlock)(NSError* error);  @protocol PKRequest &lt;NSObject&gt;  - (void)startRequest;  @end  @interface PKHTTPRequest : NSObject &lt;PKRequest&gt;  \/\/ designated initializer - (id)initWithURL:(NSURL *)url      successBlock:(PKHTTPRequestCompletionSuccessBlock)success         failBlock:(PKHTTPRequestCompletionFailBlock)fail;  @end <\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"objectivec\">@interface PKHTTPRequest () &lt;NSURLConnectionDelegate&gt;  @property (nonatomic, copy) PKHTTPRequestCompletionSuccessBlock succesBlock; @property (nonatomic, copy) PKHTTPRequestCompletionFailBlock failBlock; @property (nonatomic, retain) NSURL *url; @property (nonatomic, retain) NSURLConnection *connection; @property (nonatomic, retain) NSMutableData *data;  @end  @implementation PKHTTPRequest  #pragma mark - initialization \/ deallocation  \/\/ designated initializer - (id)initWithURL:(NSURL *)url      successBlock:(PKHTTPRequestCompletionSuccessBlock)success         failBlock:(PKHTTPRequestCompletionFailBlock)fail {     self = [super init];     if (self != nil) {         self.succesBlock = success;         self.failBlock = fail;         self.url = url;         NSURLRequest *request = [NSURLRequest requestWithURL:self.url];         self.connection = [[[NSURLConnection alloc] initWithRequest:request                                                            delegate:self                                                    startImmediately:NO] autorelease];     }     return self; }  - (id)init {     NSAssert(NO, @&quot;Use desiganted initializer&quot;);     return nil; }  - (void)dealloc {     self.succesBlock = nil;     self.failBlock = nil;     self.url = nil;     self.connection = nil;     self.data = nil;     [super dealloc]; }  #pragma mark - public methods  - (void)startRequest {     self.data = [NSMutableData data];     [self.connection start]; }  #pragma mark - NSURLConnectionDelegate implementation  - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {     [self.data appendData:data]; }  - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {     self.failBlock(error);     self.data = nil; }  - (void)connectionDidFinishLoading:(NSURLConnection *)connection {     self.succesBlock([NSString stringWithUTF8String:self.data.bytes]);     self.data = nil; }  @end <\/code><\/pre>\n<\/p><\/div>\n<\/div>\n<p>  \u0410 \u043f\u043e\u0442\u043e\u043c \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e API \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <code>PKGetUserNameRequest<\/code> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <code>PKHTTPReuquest<\/code><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f PKGetUserNameRequest<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">typedef void (^PKGetUserNameRequestCompletionSuccessBlock)(NSString *userName); typedef void (^PKGetUserNameRequestCompletionFailBlock)(NSError* error);  @interface PKGetUserNameRequest : NSObject &lt;PKRequest&gt;  - (id)initWithUserID:(NSString *)userID         successBlock:(PKGetUserNameRequestCompletionSuccessBlock)success            failBlock:(PKGetUserNameRequestCompletionFailBlock)fail;  @end <\/code><\/pre>\n<pre><code class=\"objectivec\">NSString *kApiHost = @&quot;http:\/\/someApiHost.com&quot;; NSString *kUserNameApiKey = @&quot;username&quot;;  @interface PKGetUserNameRequest ()  @property (nonatomic, retain) PKHTTPRequest *httpRequest;  - (NSString *)parseResponse:(NSString *)response;  @end  @implementation PKGetUserNameRequest  #pragma mark - initialization \/ deallocation  - (id)initWithUserID:(NSString *)userID         successBlock:(PKGetUserNameRequestCompletionSuccessBlock)success            failBlock:(PKGetUserNameRequestCompletionFailBlock)fail {     self = [super init];     if (self != nil) {         NSString *requestString = [kApiHost stringByAppendingFormat:@&quot;?%@=%@&quot;, kUserNameApiKey, userID];         self.httpRequest = [[[PKHTTPRequest alloc] initWithURL:[NSURL URLWithString:requestString]                                                   successBlock:^(NSString *responseString) {                                                       \/\/ \u0440\u043e\u043a\u043e\u0432\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 - \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a self                                                       NSString *userName = [self parseResponse:responseString];                                                       success(userName);                                                   } failBlock:^(NSError *error) {                                                       fail(error);                                                   } ] autorelease];     }     return self; }  - (id)init {     NSAssert(NO, @&quot;Use desiganted initializer&quot;);     return nil; }  - (void)dealloc {     self.httpRequest = nil;     [super dealloc]; }  #pragma mark - public methods  - (void)startRequest {     [self.httpRequest startRequest]; }  #pragma mark - private methods  - (NSString *)parseResponse:(NSString *)response {     \/* ...... *\/     return userName; }  @end <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 <code>NSString *userName = [self parseResponse:responseString];<\/code> \u2014 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0443 self \u0432 Malloc \u0431\u043b\u043e\u043a\u0435, self \u0440\u0435\u0442\u0435\u0439\u043d\u0438\u0442\u0441\u044f, \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0446\u0438\u043a\u043b \u0432 \u0433\u0440\u0430\u0444\u0435 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/9a3\/2c3\/36b\/9a32c336b6fb4bcc8d3170b17f547a9e.png\"\/><\/p>\n<p>  \u0418\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0437\u0434\u0430\u0432 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 self \u0441 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c __block, \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0437\u0440\u044b\u0432\u0430 \u0446\u0438\u043a\u043b\u0430 \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">\/\/ \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u0432\u043b\u0430\u0434\u0435\u043d\u0438\u044f __block PKGetUserNameRequest *selfRequest = self; self.httpRequest = [[[PKHTTPRequest alloc] initWithURL:[NSURL URLWithString:requestString]                                           successBlock:^(NSString *responseString) {                                               NSString *userName = [selfRequest parseResponse:responseString];                                               success(userName);                                           } failBlock:^(NSError *error) {                                               fail(error);                                           } ] autorelease]; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0418\u043b\u0438 \u0436\u0435, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0431\u043b\u043e\u043a\u0438 \u0438\u0437 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043c\u0435\u0442\u043e\u0434 <code>startRequest<\/code>,<br \/>  <code>startRequestwithCompaltion:fail:<\/code>, \u0438 \u0440\u0435\u0442\u0435\u0439\u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e memory management \u0441 \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u0437\u044f\u0442 \u0438\u0437 <a href=\"http:\/\/www.youtube.com\/watch?v=SKot4tfsV24&amp;feature=em-uploademail\">\u0432\u0438\u0434\u0435\u043e \u043b\u0435\u043a\u0446\u0438\u0438 [7]<\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0448\u0438\u0431\u043a\u0430 \u0441 NSStackBlock<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">void addBlockToArray(NSMutableArray* array) {     NSString *string = @&quot;example string&quot;;     [array addObject:^{         printf(&quot;%@\\n&quot;, string);     }];  }  void example() {      NSMutableArray *array = [NSMutableArray array];     addBlockToArray(array);     void (^block)() = [array objectAtIndex:0];     block(); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0431\u043b\u043e\u043a \u0432 \u043a\u0443\u0447\u0443 (heap) \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043b\u0438 \u0432\u0432\u0435\u0440\u0445 \u043f\u043e \u0441\u0442\u0435\u043a\u0443, \u043e\u0448\u0438\u0431\u043a\u0438 \u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 ARC \u043a\u043e\u0434\u0435.<\/p>\n<h5>\u0421++ \u043b\u044f\u043c\u0431\u0434\u044b<\/h5>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043b\u044f\u043c\u0431\u0434 \u0432 runtime, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u0445. \u0413\u043e\u0432\u043e\u0440\u044f\u0442, \u0447\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0434\u043b\u044f \u043b\u044f\u043c\u0431\u0434 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435.<a href=\"http:\/\/stackoverflow.com\/questions\/20313847\/c-lambda-implementation-in-runtime\">[9]<\/a><br \/>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u0443\u044e \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e. <br \/>  \u041b\u044f\u043c\u0431\u0434\u044b \u0432 C++ \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. <br \/>  \u041b\u044f\u043c\u0431\u0434\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043a \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043d\u043e \u0432\u0441\u0435 \u0436\u0435 \u044d\u0442\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u041b\u044f\u043c\u0431\u0434\u0430 \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0441 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c \u0438 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c, \u0432\u044b\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a\u0435.<\/p>\n<p>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0443 \u043d\u0430 heap \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0435\u0435 \u043a \u0442\u0438\u043f\u0443 <code>std::function <\/code><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043b\u044f\u043c\u0431\u0434\u044b \u0432 heap<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">auto lamb = []() {return 5;}; auto func_lamb_ptr = new std::function&lt;int()&gt;(lamb); <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e-\u0447\u043b\u0435\u043d \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>  <b>mutable<\/b> \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043b\u044f\u043c\u0431\u0434\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043f\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e (\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u043b\u044f\u043c\u0431\u0434\u0443 \u0442\u0430\u043a: <code>auto lambda = [multiplier](int num) throw() mutable<\/code> \u0442\u043e \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>multiplier<\/code> \u0432\u043d\u0443\u0442\u0440\u0438 \u043b\u044f\u043c\u0431\u0434\u044b, \u043d\u043e multipler \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>multiplier<\/code> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043b\u044f\u043c\u0431\u0434\u044b. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0442\u0430\u043a: \u0432 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 \u043b\u044f\u043c\u0431\u0434\u044b (\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435) \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0447\u043b\u0435\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c. \u0422\u0443\u0442 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u0435\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0435\u0435, \u0442\u043e \u044d\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435-\u0447\u043b\u0435\u043d\u044b \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u044f\u043c\u0431\u0434\u0435, \u043e\u043d\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439. \u0418\u043d\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u044b \u043e\u0431\u0435\u0440\u043d\u0443\u0442\u044b\u043c\u0438 \u0432 <a href=\"http:\/\/en.cppreference.com\/w\/cpp\/utility\/functional\/ref\"><code>std::ref<\/code><\/a>. Obj-C \u0431\u043b\u043e\u043a\u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb. <\/p>\n<p>  <a name=\"ObjCpp\"><\/a>  <\/p>\n<h4>Objective-C++<\/h4>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a Objecitve-C++ \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043a\u0430\u043a Objective-C \u0442\u0430\u043a \u0438 C++, \u0432 \u043d\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u0431\u043b\u043e\u043a\u0438. \u041a\u0430\u043a \u0436\u0435 \u043b\u044f\u043c\u0431\u0434\u044b \u0438 \u0431\u043b\u043e\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443?<\/p>\n<ol>\n<li> \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0443 \u043b\u044f\u043c\u0431\u0434\u0443.\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"objectivec\">    void (^block_example)(int);     auto lambda_example = [](int number){number++; NSLog(@&quot;%d&quot;, number);};     block_example = lambda_example;     block_example(10); \/\/ log 11 <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/li>\n<li> \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0431\u043b\u043e\u043a \u043e\u0431\u044a\u0435\u0442\u043a\u0443 std::function\n<p>  \u0417\u0434\u0435\u0441\u044c \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0442\u043e Objective-C \u0438 C++ \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0431\u043b\u043e\u043a\u0430 \u0432 <code>std::function<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u00ab\u0432\u0438\u0441\u044f\u0447\u0438\u043c\u00bb \u0441\u0441\u044b\u043b\u043a\u0430\u043c.<\/p>\n<\/li>\n<li>\u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0435 \u0431\u043b\u043e\u043a.\n<p>  \u0423 \u043b\u044f\u043c\u0431\u0434\u044b \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 copy-assignment. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0435\u0439 \u043d\u0438 \u0431\u043b\u043e\u043a \u043d\u0438 \u0434\u0430\u0436\u0435 \u0441\u0430\u043c\u0443 \u0441\u0435\u0431\u044f.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">int main() {     auto lambda1 = []() -&gt; void { printf(&quot;Lambda 1!\\n&quot;); };     lambda1 = lambda1;  \/\/ error: use of deleted function \u2018main()::&lt;lambda()&gt;& main()::&lt;lambda()&gt;::operator=(const main()::&lt;lambda()&gt;&)\u2019     return 0; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/li>\n<\/ol>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043b\u044f\u043c\u0431\u0434\u0430\u043c\u0438 \u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u043d\u044b, \u044f \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0438 \u0440\u0430\u0437\u0443 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. <\/p>\n<h4>\u0421\u0441\u044b\u043b\u043a\u0438 \u043f\u043e \u0442\u0435\u043c\u0435<\/h4>\n<p>  <\/p>\n<ol>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/66021\/\">\u041e \u043b\u044f\u043c\u0431\u0434\u0430\u0445 C++<\/a>  <\/li>\n<li><a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BC%D1%8B%D0%BA%D0%B0%D0%BD%D0%B8%D0%B5_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)\">\u0417\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f<\/a>  <\/li>\n<li><a href=\"https:\/\/developer.apple.com\/library\/ios\/documentation\/cocoa\/Conceptual\/Blocks\/Articles\/00_Introduction.html\">\u041e \u0431\u043b\u043e\u043a\u0430\u0445 Apple<\/a>  <\/li>\n<li><a href=\"http:\/\/www.mikeash.com\/pyblog\/friday-qa-2011-06-03-objective-c-blocks-vs-c0x-lambdas-fight.html\">\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043b\u044f\u043c\u0431\u0434 \u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043d\u0430 \u0430\u043d\u0433\u043b<\/a>  <\/li>\n<li><a href=\"http:\/\/ru.cppreference.com\/w\/cpp\/language\/lambda\">\u0414\u043e\u043a\u0438 C++ \u043b\u044f\u043c\u0431\u0434<\/a>  <\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/119877\/\">\u041e \u0431\u043b\u043e\u043a\u0430\u0445<\/a>  <\/li>\n<li><a href=\"http:\/\/www.youtube.com\/watch?v=SKot4tfsV24&amp;feature=em-uploademail\">\u041e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e \u043e \u0431\u043b\u043e\u043a\u0430\u0445<\/a>  <\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/12202656\/c11-lambda-implementation-and-memory-model?rq=1\">\u0412\u043e\u043f\u0440\u043e\u0441 \u043e\u0431 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 C++ \u043b\u044f\u043c\u0431\u0434 \u043d\u0430 stackoverflow.com<\/a>  <\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/20313847\/c-lambda-implementation-in-runtime\">\u0412\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e C++ \u043b\u044f\u043c\u0431\u0434 \u0432 runtime<\/a>  <\/li>\n<li><a href=\"http:\/\/stackoverflow.com\/questions\/11669292\/objective-c-11-why-cant-we-assign-a-block-to-a-lambda\">\u041e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u043b\u044f\u043c\u0431\u0434 \u0438 \u0431\u043b\u043e\u043a\u043e\u0432<\/a>  <\/li>\n<li><a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/vstudio\/dd293603.aspx\">\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043b\u044f\u043c\u0431\u0434<\/a>  <\/li>\n<li><a href=\"http:\/\/touchdev.ru\/documents\/963\">\u041e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 Objective-C \u0438 C++<\/a>  <\/li>\n<li><a href=\"http:\/\/habrahabr.ru\/post\/137469\/\">\u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f C++ \u0432 Objective-C \u043f\u0440\u043e\u0435\u043a\u0442\u044b<\/a>  <\/li>\n<\/ol>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/204356\/\"> http:\/\/habrahabr.ru\/post\/204356\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0441\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043b\u044e\u0434\u044f\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u043b\u044f\u043c\u0431\u0434\u0430\u043c\u0438 C++, \u043d\u043e \u0445\u043e\u0442\u044f\u0442 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 Objective-C \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. <br \/>  \u0417\u0434\u0435\u0441\u044c \u044f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0437\u0430\u0445\u0432\u0430\u0442\u0430 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0441\u0442\u0432\u0438\u0435 \u043b\u044f\u043c\u0431\u0434 \u0438 \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<br \/>  \u0412\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f Apple LLVM Compiler 4.2 (Clang). \u0414\u043b\u044f \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0433\u043e Obj-C \u043a\u043e\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ARC, \u0442.\u043a \u044f \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0441\u044c \u043c\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 non-ARC \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ARC.   <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-204356","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/204356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=204356"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/204356\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=204356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=204356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=204356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}