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);
}];
}
这里的 success(response) 和 failure(response)调用作用?
方法里面的代码块声明并没有给代码块命名,例如void (^success)(GRNetworkResponse *response),为什么可以success(response)这样调用?
这样调用又有何用处?
而且很多其他网络请求的带有代码块的方法中没有类似的调用!
这种写法是OC的block写法,说白一点就是匿名函数,既然是匿名函数,当然就不需要方法名了。它的具体实现是一种函数指针。
为什么这么写呢?据说是因为这样写可以把一些回调操作和它们的请求方法写在一起,这样就不必满程序找回调方法的位置,便于编写和阅读时思维的连贯性。
为什么很多地方又不这么写呢?因为这种写法本身并不是特别规范,如果使用不当还会造成内存溢出等问题。所有好的程序并不特别依赖这种写法。