objective-c – 如何创建一个“包裹”目标/选择对对的块?
我喜欢块,而且很酷.
然而,我发现块可能会混乱我的代码,使得读取更难,而不会将所有代码都放在Xcode中(我不喜欢这样做). 我喜欢将我的代码分解为逻辑方法(选择器)以使其更容易阅读,但它(表面上)显示出这样的框架,如dispatch,AFNetworking和其他几个不容易实现. 我也不在乎代理方式,这意味着我不能像我想要的那样命名我的方法,而是依靠别人认为我需要的方法. 所以,没有写一堆这样的胶水代码: -(void) reloadData { ... [[EventsManager instance] data:YES async:^(NSArray *events) { [self processEvents:events] }]; ... } 我可以这样做: -(void) reloadData { ... [[EventsManager instance] data:YES async:createBlock(self,@selector(processEvents:))]; ... } 哪个更容易阅读(对我来说) 有了我们用Objective-C的力量,它是运行时,这应该是可能的,不是吗?虽然我没有看到像这样的东西. 解决方法
我从学术角度喜欢你的答案; 1,显然,你学到了一些东西.
从实际的角度来看,似乎非常多的脆弱性,很少减少打字,同时也会导致呼叫站点的一些信息丢失. 这样做的好处是它是明确的: -(void) reloadData { ... [[EventsManager instance] data:YES async:^(NSArray *events) { [self processEvents:events] }]; ... } 读取,看到需要异步回调块来处理参数,并且processEvents:method on self将用于执行实际工作. 表达式createBlock(self,@selector(processEvents :))是相同的有损表示;它失去了回调的明确论证以及该参数和正在调用的方法之间的映射(我经常看到回调块,如上所述,在调用该方法之前有一些轻量级逻辑和/或参数处理). 还要注意,在调用时将非可变链接调用站点作为一个varargs进行处理是违反了C标准,并且在某些具有某些参数列表的ABI上不起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |