美文网首页
分类和扩展区别

分类和扩展区别

作者: Queen_BJ | 来源:发表于2020-09-08 14:03 被阅读0次
分类

作用
1、声明私有方法
2、分解体积庞大的类文件
3、还可以添加实例方法,类方法,协议,属性(添加getter和setter方法,并没有实例变量,添加实例变量需要用关联对象
特点
为系统类添加方法

  • 分类能添加成员变量吗?
    不能。只能通过关联对象(objc_setAssociatedObject)来模拟实现成员变量
  • 如果工程里有两个分类A和B,两个分类中有一个同名的方法,哪个方法最终生效?
    取决于分类的编译顺序,最后编译的那个分类的同名方法最终生效(因为在动态添加类的方法的时候是倒序遍历方法列表的,最后编译的分类的方法会放在方法列表前面,访问的时候就会先被访问到)
扩展(Extension)

Extension:扩展, 匿名分类;放在.m文件中
声明私有属性; (不对子类暴露)
声明私有方法;
声明私有成员变量;

只有.h文件
UIView+ExtensionView.h
ProtocolFile.h

协议
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@protocol ProtocolFile <NSObject>

-(void)ProtocolFile;
@end

扩展
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UIView ()

-(void)test;
@property (nonatomic, copy) NSString *colorStr;
+(void)testAdd;

@end

NS_ASSUME_NONNULL_END

控制器调用
#import "ViewController.h"
#import "UIView+ExtensionView.h"
#import "ProtocolFile.h"

@interface ViewController ()

@property (nonatomic, strong) UIView *stringView;
@property (nonatomic, weak) id <ProtocolFile>delagte;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self.stringView test];
    [UIView testAdd];
    self.stringView.colorStr = @"hah";
    
    [self.delagte ProtocolFile];
   
}

所以扩展只以声明方式存在,调用是写在.m中的,所以都是私有的。
平时开发中其实用的最多。写在.m中的方法和属性,只有本类能用

分类(Category)和扩展(Extension)区别?
协议 (protocol)

代理(delegate)要用weak,防止循环引用。
代理用weak不用assign原因:

  • assign:
    assign 指针赋值,不对引用计数操作,使用之后如果没有置为nil,可能会产生野指针,delegate指向的对象销毁之后,delegate中依然会保存之前对象的地址,delegate就成了野指针。
  • weak:
    eak 指明该对象并不负责保持delegate这个对象,delegate这个对象的销毁是由外部控制的,当delegate指向的对象销毁之后,delegate = nil。

相关文章

  • iOS基础题

    一、category 和 extension 的区别?(分类和扩展的区别) 1,分类有名字,类扩展没有名字,是一种...

  • iOS知识基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • IOS知识基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • 1. iOS面试题基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • iOS面试题-基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • iOS面试题--基础篇

    category 和 extension 的区别 分类有名字,类扩展没有分类名字,是一种特殊的分类 分类只能扩展方...

  • 一些关键字的使用__weak,__block

    1、category 和 extension 的区别分类有名字,类扩展没有分类名字,是一种特殊的分类分类只能扩展方...

  • iOS开发:Category(分类)和Extension(类扩展

    Category (分类) 和 Extension (类扩展)的理解和区别: Category Category解...

  • 分类和扩展的区别

    分类 category 给一个系统公用的类添加额外的方法时,使用category,生成NSObject+addit...

  • 分类和扩展的区别

    分类只能扩展方法,不能扩展属性和实例变量,如果包含成员变量会直接报错! 如果分类中声明了一个属性,那么分类中只会生...

网友评论

      本文标题:分类和扩展区别

      本文链接:https://www.haomeiwen.com/subject/ududektx.html