美文网首页ios 常用知识点详解
OC分类和类扩展的使用

OC分类和类扩展的使用

作者: 萤火驻守心间 | 来源:发表于2021-12-31 11:01 被阅读0次

通常在类中使用@property声明属性,编译器会自动生成_成员变量和setter/getter。

分类(类别):原则上只能声明属性和添加方法,实际上属性的setter/getter可通过runtime关联对象实现。

原因:分类的指针结构体中,没有属性列表,所以使用@property无法生成_成员变量和setter/getter方法。

类扩展(匿名分类):可增加方法和成员变量,只是该实例变量默认是@private类型,且适用范围在自身类。

示例:用分类封装一个可展示在scrollview上的空态数据类,emptyView建议根据自身需求自定义

#import

typedefNS_ENUM(NSUInteger,emptyListType){

    //无数据

    emptydata,

    //无网络

    emptyNetWork,

};

@interface UIScrollView (Empty)

@property(nonatomic, strong) NSString *idx;

@property(nonatomic, strong) UIView *emptyView;

//scrollview上添加emptyView,展示不同网络请求状态对应不同的empty页面

-(void)showEmptyType:(emptyListType)type;

@end

#import "UIScrollView+Empty.h"

#import

staticconstNSString*idxkey = @"idxkey";

@implementation UIScrollView (Empty)

-(NSString *)idx{

    return objc_getAssociatedObject(self,(__bridge const void * _Nonnull)(idxkey));

}

- (void)setIdx:(NSString*)idx{

    objc_setAssociatedObject(self, (__bridge const void * _Nonnull)(idxkey), idx, OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

-(UIView *)emptyView{

    return objc_getAssociatedObject(self, @selector(emptyView));

}

-(void)setEmptyView:(UIView*)emptyView{

    objc_setAssociatedObject(self,@selector(emptyView), emptyView,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

}

//可根据自己需求在emptyView上添加imageview和label等

- (void)addEmptyViewWithYspace:(CGFloat)yspace{

    if(self.emptyView.superview) {

        [self.emptyView removeFromSuperview];

    }

    self.emptyView = [[UIView alloc]initWithFrame:CGRectMake(0.5*(UIScreen.mainScreen.bounds.size.width-200), yspace, 200, [self.idx floatValue])];

    self.emptyView.backgroundColor = UIColor.orangeColor;

}

-(void)showEmptyType:(emptyListType)type{

    if(type ==emptydata) {

        self.idx=@"170";

    }else{

        self.idx=@"200";

    }

    [self addEmptyViewWithYspace:0.5*(self.frame.size.height-[self.idx floatValue])];

    self.emptyView.userInteractionEnabled = false;

    NSLog(@"emptyview%@",self.emptyView);

    [selfaddSubview:self.emptyView];

}

@end

展示效果如图1-1:

1-1

类扩展:

@interface Persion()

@property(nonatomic, strong) NSString *test;

- (void)test;

@end

@implementation Persion

/*

 写相应实现

 */

- (void)test{

}

@end

相关文章

  • OC分类和类扩展的使用

    通常在类中使用@property声明属性,编译器会自动生成_成员变量和setter/getter。 分类(类别):...

  • 分类、类扩展与继承

    在OC中,扩展一个类的方式有两种,继承和分类。 分类(Category) 概念 分类(Category),是OC中...

  • 分类、类扩展的区别

    分类、类扩展的区别 分类(Category):概念分类(Category)是OC中的特有语法,它是表示一个指向分类...

  • 类扩展和关联对象

    分类和类扩展 在OC类的加载[https://www.jianshu.com/p/0d728be5b598]中我们...

  • swift扩展

    扩展 Swift中的扩展,有点类似于OC中的分类(Category) 扩展作用 扩展可以为枚举、结构体、类、协议添...

  • iOS学习相关内容

    OC基础_分类: 分类的定义:分类是OC中的特有语法,它是表示一个指向分类结构体的指针,它是为了扩展系统类的方法而...

  • Swift入门基础6——扩展、泛型、协议

    扩展 Swift中的扩展,对应OC中的分类,可以用它来拓展类的功能。 可以扩展类的什么: 添加新的属性(只能是计算...

  • OC 类别(分类)+类扩展

    适用范围 当你已经封装好了一个类(也可能是系统类、第三方库),不想在改动这个类了,可是随着程序功能的增加需要在类中...

  • iOS底层学习:类的扩展和关联对象

    类的扩展和分类 category:分类、类别 给类增加方法 不能添加成员变量 可以使用runtime给分类添加属性...

  • iOS中Category的底层实现原理

    1. Category的使用场景 Category也叫分类或类别,是OC提供的一种扩展类的方式。不管是自定义的类还...

网友评论

    本文标题:OC分类和类扩展的使用

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