基础补漏(持续)

1、 NSOperation 和 GCD 的选择


  • 项目中使用 NSOperation 的优点是 NSOperation 是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化 NSOperation 的设计思路,是具有面向对象的优点(复用、封装),使得实现是多线程支持,而接口简单,建议在复杂项目中使用。

  • 项目中使用 GCD 的优点是 GCD 本身非常简单、易用,对于不复杂的多线程操作,会节省代码量,而 Block 参数的使用,会是代码更为易读,建议在简单项目中使用。

  • NSOperation 是对 GCD 面向对象的封装,但是 GCD 基于C语言开发,效率却更高. 建议如果任务之间有依赖关系或者想要监听任务完成状态的情况下优先选择 NSOperation 否则使用 GCD 。

  • NSOperration可以通过KVO监控操作进行的状态(准备、执行中、完成、被取消),GCD无;

  • NSOperration可以很容易管理各个操作之间的依赖关系(addDependency:),CGD可以通过Block的嵌套实现,较为复杂;

  • NSOperationQueue可以设置最大并发数量 (setMaxConcurrentOperationCount:),GCD无;


2、@Class 和 #import 区别

#import "B.h"    
@interface A : NSObject {   
  
    B *b;   
}   
@end  

这里,A类是引用类,B类是被引用类,这里先不考虑A类的实现文件。
  • *#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class方式只是告诉编译器在A.h文件中 B b 只是类的声明,具体这个类里有什么信息,这里不需要知道,等实现文件中真正要用到时,才会真正去查看B类中信息
  • 使用@class方式由于只需要只要被引用类(B类)的名称就可以了,而在实现类由于要用到被引用类中的实体变量和方法,所以需要使用#importl来包含被引用类的头文件;
  • 通过上面2点也很容易知道在编译效率上,如果有上百个头文件都#import了同一个文件,或者这些文件依次被#improt(A->B, B->C,C->D…),一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍,这样的效率也是可想而知的,而相对来讲,使用@class方式就不会出现这种问题了;

项目中使用model数据类需要使用 @class 声明

#import <UIKit/UIKit.h>
@class SDPModelForHotCity;

@interface SDPCellForHotCity : UITableViewCell

@property (nonatomic, retain)UIButton *buttonForMiss;
@property (nonatomic, retain)UILabel *labelForMiss;
- (void)passModelForHotCity:(SDPModelForHotCity *)model;
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,183评论 19 139
  • 3、请说明一下objective-c中#import 、#include 及@class的区别?#import<>...
    AlanGe阅读 4,536评论 0 0
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,433评论 30 472
  • 1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch...
    阳光的大男孩儿阅读 10,492评论 0 13
  • 八月太阳的事情, 当时和我一起来的小伙伴离职了,兄弟们我走了,以后有空一起耍。常回来看看,记得带水果。每个人都是容...
    离别钩阅读 1,778评论 0 0

友情链接更多精彩内容