问题1:block用多了好不好,感觉很高大尚一样。 @interface ViewController () @end @implementation ViewController – (void)viewDidLoad { NSArray *blockData(NSString * string , NSUInteger age) { @interface TwoVC () @end @implementation TwoVC – (void)viewDidLoad { |
|
5分 |
1. block不是随便乱用的,使用block主要是解决回调 。它和delegate的作用差不多,它将delegate中的协议方法以类似“函数指针”的方式来调用,看起来更整洁。
2. extern 的用法等同于c,全局变量的定义。 如 ///////Defines.h #import <Foundation/Foundation.h> #ifndef DEFINES #define DEFINES extern NSString *const kAPIScheme; extern NSString *const kAPIHost; extern NSString *const kPusherAPIKey; #endif /////////Defines.m #import "Defines.h" #pragma mark - API NSString *const kAPIScheme = @"https"; NSString *const kAPIHost = @"api.xxxxx.com"; NSString *const kPusherAPIKey = @"xxxxx"; |
block是OC对闭包的实现,我觉得还是很方便的,能省代码,又能把逻辑放在一起。没什么高大尚的,很多语言都支持闭包。 |
|
block并不是增加一种回调的选择,闭包可以为部分资源不需要一直存在的(只在有限的时间、作用域内存在)、数据不想被外部访问到(而内部可以访问外部)的这些情况提供一种很好的处理机制。 |
|
2分 |
就是C里的回调函数而已, *符号改成^就是。你也可以使用delegate只不过麻烦点而已。
至于extern 最好不要太多吧, 不然多了 自己都乱了 |
这个不是要不要的问题,你要理解extern解决的是什么问题,申明可以多次,但是定义必须只能有一个 |
|
那如果这样,那我可以把项目中所有的公共方法,如:UIview的类方法 ,UIviewController的类方法都放在一个NSObject 类中,然后用以下这种类型写:
extern NSArray *blockData(NSString * string , NSUInteger age); NSArray *blockData(NSString * string , NSUInteger age) { |
|
13分 |
如果你的文件是.mm或者说要支持C++混编的话,要加:
#ifdef __cplusplus extern "C" { #endif /** * 只取浮点数的前三位 */ CGFloat roundedFloat(CGFloat originalFloat); #ifdef __cplusplus } #endif 因为C++编译后的方法名是很乱的,直接编译后按C的方式去找会找不到,因为C++支持函数重载。 |
嗯,谢谢。懂了很多东西。
|
|
AFNetworking可以使用block处理网络请求的回调 ,但是使用block又要注意避免循环引用出现内存问题 那么使用AFNetworking的block回调要注意哪些东西呢?
|
|
我只是注意到避免循环引用,没有考虑内存的问题昂~~~好羞涩。
|