首页 > Objective-C代码块问题

Objective-C代码块问题

Objective-C代码块了解不是很透彻
有如下代码:

- (void)chatListWithMessageId:(NSString*)messageId
                      success:(void (^)(GRNetworkResponse *response))success
                      failure:(void (^)(GRNetworkResponse *response))failure
{
   
    /*
    DO SOME STUFF
    ...
    */
            success(response);
        }
    } failure:^(GRNetworkResponse *response) {
        failure(response);
    }];
}
  1. 这里的 success(response)failure(response)调用作用?

  1. 方法里面的代码块声明并没有给代码块命名,例如void (^success)(GRNetworkResponse *response),为什么可以success(response)这样调用?
    这样调用又有何用处?

  1. 而且很多其他网络请求的带有代码块的方法中没有类似的调用!


这种写法是OC的block写法,说白一点就是匿名函数,既然是匿名函数,当然就不需要方法名了。它的具体实现是一种函数指针。

为什么这么写呢?据说是因为这样写可以把一些回调操作和它们的请求方法写在一起,这样就不必满程序找回调方法的位置,便于编写和阅读时思维的连贯性。

为什么很多地方又不这么写呢?因为这种写法本身并不是特别规范,如果使用不当还会造成内存溢出等问题。所有好的程序并不特别依赖这种写法。

【热门文章】
【热门文章】