ios 常用知识点详解

OC分类和类扩展的使用

2021-12-31  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读