美文网首页
OC中类别(Category)的属性

OC中类别(Category)的属性

作者: 一叶知秋0830 | 来源:发表于2019-12-05 17:08 被阅读0次

原则上来说类别(分类)中只可以添加方法,不可以添加属性和成员变量(只是理论上不能添加属性,实际上是可以通过RunTime机制来添加的)。
如下所示,类别也可以和类一样通过@property来添加属性,但是一般情况下不要这么做,因为如果直接和类一样来通过@property来添加属性的话,编译和运行都不会报错,但是一旦程序中有地方通过self.deviceName_deviceName的形式来访问属性或变量就会报错,因为类别的结构体指针中没有属性列表,所以类别中用@property是不会生成带下划线的成员变量的,也不会生成setter/getter方法,所以编译或运行时因为找不到setter或getter方法而报错。

但在一些特殊情况下我们可以在类别中通过@property来添加属性后手动在.m文件中实现setter和getter方法。如下所示是一个UIView的分类,通过@property添加了一个x的属性,手动实现的setter/getter方法其实并不是直接设置的x或获取的x的值。或者可以通过runtime机制来添加属性。

// .h文件
@interface UIView (QJAddiontial)

@property (nonatomic, assign) CGFloat x;

@end
// .m文件
#import "UIView+QJAddiontial.h"

@implementation UIView (QJAddiontial)

- (void)setX:(CGFloat)x
{
    CGRect frame = self.frame;
    frame.origin.x = x;
    self.frame = frame;
}

- (CGFloat)x
{
    return self.frame.origin.x;
}

@end

需要注意的是,由于类别不能通过常规方法添加成员变量,所以下面这种写法是会报错的。

@interface Device (Aditional)
{
    NSString *deviceType;
}

@end

相关文章

  • OC中类别(Category)的属性

    原则上来说类别(分类)中只可以添加方法,不可以添加属性和成员变量(只是理论上不能添加属性,实际上是可以通过RunT...

  • iOS中的Category类别

    问题: OC中类别(Category)是什么?Category类别是Objective-C语言中提供的一个灵活的类...

  • oc中的 分类 和 代理

    oc 中的分类 Category 类别的声明格式 @interface 类名 (类别的名字) @interfac...

  • Category与Extension

    Category概述:Category是OC2.0之后添加的语言特性,Category又叫类别,分类等,能够在不改...

  • iOS开发 runtime运行时的学习笔记一

    1.利用runtime在类别category中添加属性 @property (nonatomic,strong) ...

  • 什么是类别(Category)

    9:什么是类别(Category) 类别category 是oc中一个灵活的类扩展机制,用于在不熟悉,不改变原来的...

  • 浅谈OC类别(Category)

    简述 类别是一种为现有类添加新方法的方式,我们有时可以见到“类名称+类别名称”的命名方式。类别可以添加属性prop...

  • ios内存管理

    速查备忘 OC基础之类别(Category)和扩展(Extension): https://www.jianshu...

  • iOS中的runTime

    运行时,我们最常见的可能就是创建类别(Category),为类别添加属性,类别是不能直接添加属性的,可以添加方法,...

  • 常用的类别之UIView

    这些都是笔记,大神勿笑。 另附 剖析OC中的bounds与frame的区别 分类(类别/Category)与 类扩...

网友评论

      本文标题:OC中类别(Category)的属性

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