开发者社区> 问答> 正文

6、category & extension区别,能给NSObject添加Extension吗,结果

6、category & extension区别,能给NSObject添加Extension吗,结果如何?

展开
收起
游客bnlxddh3fwntw 2020-04-13 15:12:27 4149 0
1 条回答
写回答
取消 提交回答
  • category:分类

    给类添加新的方法
    不能给类添加成员变量
    通过@property定义的变量,只能生成对应的getter和setter的方法声明,但是不能实现getter和setter方法,同时也不能生成带下划线的成员属性
    是运行期决定的
    注意:为什么不能添加属性,原因就是category是运行期决定的,在运行期类的内存布局已经确定,如果添加实例变量会破坏类的内存布局,会产生意想不到的错误。

    extension:扩展

    可以给类添加成员变量,但是是私有的 可以給类添加方法,但是是私有的 添加的属性和方法是类的一部分,在编译期就决定的。在编译器和头文件的@interface和实现文件里的@implement一起形成了一个完整的类。 伴随着类的产生而产生,也随着类的消失而消失 必须有类的源码才可以给类添加extension,所以对于系统一些类,如nsstring,就无法添加类扩展 不能给NSObject添加Extension,因为在extension中添加的方法或属性必须在源类的文件的.m文件中实现才可以,即:你必须有一个类的源码才能添加一个类的extension。

    2020-04-13 15:12:43
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Apache Wicket User Guide - Ref 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载