分类,扩展和继承的区别

来源:互联网 发布:关于网络直播的作文800 编辑:程序博客网 时间:2024/05/29 07:37

1:分类和扩展的区别

      <1>分类:声明的时候使用格式中括号必须要有分类名称,创建完成后有两个文件夹(Person+action.h Person+action.m文件)

@interface 类名 (分类名称)/*   方法声明*/@end@implementation 类名(分类名称)/*  方法实现*/@end
       扩展:声明的时候使用格式中括号没有东西,创建完成后只有Person_action方法
interface Person ()/*方法声明或者成员变量*/@end
            <2>:分类只能扩充方法,不能扩展属性和成员变量;如果分类中声明了一个属性,那么分类只会生成这个属性的set、get方法声明,也就是不会有实现,所以如果使用该属性,程序将会崩溃

            扩展中声明的方法和成员变量是私有的,只有在扩展类中能调用,外部的类无法调用

例如:在分类中设置成员变量:

#import "Person.h"@interface Person (action)@property(copy,nonatomic)NSString *testCategory;@end
在类别中设置成员变量:

#import "Person.h"@interface Person ()//注意括号中没有类名称,这是与分类category的不同之处//为Person类添加成员变量@property(copy,nonatomic)NSString *testExtension;@end
在Person类中初始化方法中给两个成员变量赋值,运行,显示程序崩溃:


从程序崩溃的原因可以知道分类是不能声明成员变量,设置属性的;

2:分类和继承的区别

       <1>分类增加的这些方法会成为类类型的一部分;

       继承增加的方法不会成为父类的一部分

        <2>分类增加的方法如果与类的方法同名,会覆盖原类的方法,因为Category的优先级更高

        继承中子类也会覆盖父类的方法



0 0
原创粉丝点击