Objective-C语言——Extension延展

打开Xcode -> 选择IOS -> Application -> Single View Application -> 然后按next

2.如果你创建了工程那快捷键(com-shift-N) -> 选择IOS -> Application -> Single View Application -> 然后按next



在Xcode 按快捷键com+N 在左面找到iOS子类目下找到Source在右面找到Objective-C File 

Next->File Type->Category

在到File->打入文件名字



NSObject+MSObject_Category.h


#import <Foundation/Foundation.h>

//给 NSObject 添加一个类目,即非正式协议
@interface NSObject (MSObject_Category)


-(void)test1;
-(void)test2;
@end


NSObject+MSObject_Category.m

#import "NSObject+MSObject_Category.h"

@implementation NSObject (MSObject_Category)

@end



MyClass.h

#import <Foundation/Foundation.h>
#import "NSObject+MSObject_Category.h"

@interface MyClass : NSObject

@end

MyClass.m

#import "MyClass.h"
#import <objc/runtime.h>
#import "MyClass_MyClass_Extension.h"
#pragma mark -------延展---------
/*
    延展
 延展的作用就是定义自己的私有方法
 形式和类目相同,不必新创建文件,只是把类目的 interface 文件放在你需要扩展的类的.m 文件里
 
 */

@interface MyClass ()

@property (nonatomic,retain)NSString *property3;

-(void)testExtension;


@end

@implementation MyClass

-(void)test1
{

    NSLog(@"test1");
}

-(void)test2
{
    
    NSLog(@"test2");
    
    [self setProperty3:@"Property3"]; //OC 运行时设置延展中的属性的赋值
    NSLog(@"%@",self.property3); //OC 运行时设置延展中的属性的输出
    
    [self testExtension];
    
    [self MyClassExtension2];

}


//延展
-(void)testExtension
{
    NSLog(@"我是延展:testExtension");
}

//OC 运行时设置延展中的属性
-(void)setProperty3:(NSString *)property3
{
    objc_setAssociatedObject(self, @selector(property3), property3, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}


-(NSString *)property3
{

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

}


-(void)MyClassExtension2
{
    NSLog(@"我是延展:MyClassExtension2");
}


@end



在Xcode 按快捷键com+N 在左面找到iOS子类目下找到Source在右面找到Objective-C File 

Next->File Type->Extension

Class->写入MyClass

在到File->打入文件名字:MyClass_Extension


MyClass_MyClass_Extension.h

#import "MyClass.h"

@interface MyClass ()

-(void)MyClassExtension2;

@end



ViewController.m

#import "ViewController.h"
#import "MyClass.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    
    /*
     非正式协议:由于几乎所有的类都继承 NSObject(其余的继承于 NSProxy),由于 NSObject 的特殊性,所有 NSObject的类目声明称为‘非正式协议’。创建一个 NSObject 的类目而不实现,称为‘创建一个非正式协议’
     */
    
    
    MyClass *myClass = [MyClass new];
    
    if ([myClass respondsToSelector:@selector(test1)])
    {
        [myClass test1];
    }
    if ([myClass respondsToSelector:@selector(test2)])
    {
        [myClass test2];
    }
    

    
    
    
#pragma mark ---------延展--------------
    
    [myClass setValue:@"Rick" forKey:@"property3"];
    if ([myClass respondsToSelector:@selector(test2)]) {
        [myClass test2];
    }
    
    
    
    
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end







运行结果


2016-01-02 15:03:00.950 OC_LX_09_01[3771:110668] test1

2016-01-02 15:03:00.951 OC_LX_09_01[3771:110668] test2

2016-01-02 15:03:00.951 OC_LX_09_01[3771:110668] Property3

2016-01-02 15:03:00.951 OC_LX_09_01[3771:110668]我是延展:testExtension

2016-01-02 15:03:00.951 OC_LX_09_01[3771:110668]我是延展:MyClassExtension2

2016-01-02 15:03:00.952 OC_LX_09_01[3771:110668] test2

2016-01-02 15:03:00.952 OC_LX_09_01[3771:110668] Property3

2016-01-02 15:03:00.952 OC_LX_09_01[3771:110668]我是延展:testExtension

2016-01-02 15:03:00.953 OC_LX_09_01[3771:110668]我是延展:MyClassExtension2







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值