7.ios-分类 继承 extention

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
-(void)eat;
@end

//2.第二种方法
//分类的声明
//创建分类@interface <#class name#> (<#category name#>)
@interface Person (MyCategory)
-(void)run;
@end

Person.m

#import "Person.h"

@implementation Person
-(void)eat{
    NSLog(@"%@:eat",[self class]);
}

@end

//分类的实现
@implementation Person (MyCategory)

-(void)run{
    NSLog(@"%@:run",[self class]);
}

@end

Teacher.h

#import "Person.h"

@interface Teacher : Person
-(void)study;
@end

Teacher.m

#import "Teacher.h"

@implementation Teacher
-(void)study{
    NSLog(@"%@ :study",[self class]);
}
//重写父类方法
-(void)eat{
    [super eat];//保存父类方法
    NSLog(@"teacher not eat");
}

@end

Person+Category.h

#import "Person.h"
//1.第一种方法
//系统文件创建分类
//创建分类@interface Person (Category分类名可省略)
@interface Person (Category)
-(void)play;
@end

Person+Category.m

#import "Person+Category.h"

@implementation Person (Category)
-(void)play{
    NSLog(@"%@ play",[self class]);
}
@end

Person_MyExtension.h

#import "Person.h"
//与分类的区别
//@interface <#class name#> (<#category name#>)

//@end
@interface Person ()

@end

main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Teacher.h"
#import "Person+Category.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {

        Person*person=[[Person alloc]init];
        [person eat];
        [person play];
        [person run];

        Teacher*teacher=[[Teacher alloc]init];
        [teacher eat];
        [teacher study];
        [teacher play];
        [teacher run];
    }
    return 0;
}
时间: 2024-10-28 10:43:35

7.ios-分类 继承 extention的相关文章

iOS分类、延展和子类的区别

iOS分类.延展和子类的区别 类别.延展.子类的区别   类别 延展 子类 功能 为类添加方法,不用知道类的源码,添加变量(通过运行时,具体参考下面注解) 为类添加私有变量和私有方法,在类的源文件中书写,所以知道类的源代码 即能为类添加方法又能添加变量 特点 添加的方法称为类的一部分,可以被子类继承 添加的变量和方法只有这个类内部访问,正常情况下外边不能访问(可以通过运行时,见注解),不能被子类继承 新添加的变量和方法只能子类才能具有,父类不具有 使用 使用原始类的对象(调用-方法)或者类(调用

iOS分类底层实现原理小记

http://www.jianshu.com/p/b7169a5a558e OS 分类底层是怎么实现的?本文将分如下四个模块进行探究 分类的结构体 编译时的分类 分类的加载 总结 本文使用的runtime源码版本是 objc4 - 680文中类与分类代码如下 //类 @interface Person : NSObject @property (nonatomic ,copy) NSString *presonName; @end @implementation Person - (void)d

iOS 分类和继承

iOS 中分类(Categories) 和 继承(Inherit)有相同的功能,但在一些细节上又有差异,简单介绍一下两者的异同. 分类可以在不知道系统类源代码的情况下,为这个类添加新的方法.分类只能用来添加方法,不能添加成员变量.通过分类增加的方法,系统会认为是该类类型的一部分.比如: 1 #import <UIKit/UIKit.h> 2 3 @interface UIImage (WB) 4 5 /** 6 * 返回一张自由拉伸的图片 7 */ 8 + (UIImage *)resized

关于 iOS 分类(Category)的实现代码

其实质是对一个类的扩充,对类扩充的方法有两种: (1)通过继承(经常用到) (2)通过分类 一个已知类Name 其头文件Name.h #import <Foundation/Foundation.h> @interface Name : NSObject @property(strong,nonatomic)NSString* nameStr; -(Name *)init:(NSString*)nameString; -(void)nameValue; @end 其实现文件 Name.m #i

ios中 继承对象模型的归档实现

之前项目中使用到了归档的技术,也用到了MJExtension 但是问题是,这个公共库遇到了无法归档的一些问题,让人蛋疼不已,怎么办呢. 对于不能归档的部分,职能手动归档,很是无语. 查找了一下原因: 原来对于两个模型,如何A继承了B,那么A有很大的情况是无法归档的! 自己写了. 对于上述的A模型和B模来说,定义如下: #import <Foundation/Foundation.h> #import "Student.h" @interface Coder : NSObje

黑马程序员-IOS笔记-继承

#import <Foundation/Foundation.h> /* 1.继承好处: 1)抽取重复代码 2)建立了类之间的关系 3)子类可以拥有父类中的所有成员变量和方法 2.注意点 1)基本上所有的根类都是NSObject */ @interface Animal:NSObject { int _age; double _weight; } -(void)setAge:(int)age; - (int)age; -(void)setWeight:(int)weight; - (int)w

ios 分类

1 // 2 // main.m 3 // 分类 4 // 5 6 /* 7 分类:Category (类目,类别)(OC特有) 8 命名:Person+EE (Person+ 自动生成,只要写后面的,一般以模块名为名) 9 分类的作用:在不改变原来类的内容的情况下,可以给我们的类添加一些方法 10 注意: 11 1>分类只能增加方法,不能增加成员变量 12 2>分类方法的实现中可以访问原来类中的成员变量 13 3>分类可以重写原来类中的方法,但是会覆盖掉原来类的方法(一般不会再分类当中

iOS 分类:按顺序添加视图

一, 场景: 在一个父视图上添加多个子视图的情况下, 有可能出现添加视图的时机有先后的问题, 后来的视图会遮盖住先来的视图. 可以在添加子视图的时候, 获取需要展示的优先级大小..优先级越高, 就在已有视图更外层显示. 二, 分类方法代码如下: 1 // UIView+addsubview.h 2 3 @interface UIView (addsubview) 4 @property (nonatomic,assign) NSInteger sort; 5 - (void)addsubview

iOS Method Swizzling和分类的妙用AppDelegate轻量化处理

http://www.cocoachina.com/ios/20151117/14167.html 简介 在iOS工程中,AppDelegate往往会有上千行,甚至几千行,这样就会给维护AppDelegate带来诸多麻烦.比方说,老板想在出现HomeViewController之前弹出广告并停顿几秒,这样你就要加入插入广告的逻辑:又比方说,老板想在开始做个请求,判断某个开关是否打开.这样就会在AppDelegate中插入很多相关的不相关的代码. 在AppDelegate中,- (BOOL)app