Objective-C_语言_延展

ViewController.m

#import "ViewController.h"

#import "Tool.h"

#import "Tool+Tool_Category.h"

#import "MyClass.h"


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    

    //类目 延展协议

    //延展是私有方法

#pragma mark -------------延展-----------------

    

    /*

     非正式协议:由于几乎所有的类都继承于NSObject(其余的继承与NSProxy),由于NSObject

     的特殊性,所有NSObject的类目声明称为非正式协议。创建一个NSObject的了吗而不实现,创建一个非正式协议

     */

    

    MyClass *myClass=[MyClassnew];

    //- (BOOL)respondsToSelector:(SEL)aSelector;这个方法可以检查当前对象是否能够响应aSelector方法

    if ([myClass respondsToSelector:@selector(test1)])

    {

        [myClass test1];

    }

    

    if ([myClass respondsToSelector:@selector(test2)])//判断这个类里面的方法会不会响应

    {

        [myClass test2];

    }

    

    [myClass setValue:@"aa"forKey:@"property3"];

    if ([myClass respondsToSelector:@selector(test2)])

    {

        [myClass test2];

    }

    

}


- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end

=====================================================================

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

Next->File Type->Category

在到File->打入文件名字

NSObject+NSObject_Category.h

#import <Foundation/Foundation.h>


//NSObject添加一个类目,即非正式协议

@interface NSObject (NSObject_Category)


-(void)test1;


-(void)test2;


@end

====================================================================

NSObject+NSObject_Category.m

#import "NSObject+NSObject_Category.h"


@implementation NSObject (NSObject_Category)

//-(void)test1

//{

//    NSLog(@"I'm test1");

//}

//

//-(void)test2

//{

//    NSLog(@"I'm test2");

//}

@end

=======================================================================

MyClass.h

#import <Foundation/Foundation.h>

#import "NSObject+NSObject_Category.h"


//不能在这里导入延展文件

//#import "MyClass_MyClass_Extension.h"

@interface MyClass : NSObject


@end

==========================================================================

MyClass.m

#import "MyClass.h"

#import <objc/runtime.h>

#import "MyClass_MyClass_Extension.h"



#pragma mark -----------延展---------------

   


/*

 延展的作用就是定义自己的私有方法

 形式和类目相同,不必新建文件,只是把了为imuninterface文件放在你需要扩展的类的.m

 文件里

 

 类目是公有的

 

 */


@interface MyClass ()


@property(nonatomic,retain)NSString *property3;


//延展

-(void)testExtension;//MyClass.m实现


@end



//=========================================


@implementation MyClass


-(void)test1

{

    NSLog(@"test1");

}


-(void)test2

{

    NSLog(@"test2");

    [selfsetProperty3:@"aa"];

    NSLog(@"%@",self.property3);

    [selfMyClassExtension2];

    [selftestExtension];

}


//延展

-(void)testExtension

{

    NSLog(@"我是延展:textExtension");

}

//OC运行时设置延展中的设置


-(void)setProperty3:(NSString *)property3

{

    objc_setAssociatedObject(self,@selector(property3),property3 ,OBJC_ASSOCIATION_COPY_NONATOMIC);

}

-(NSString *)property3

{

    returnobjc_getAssociatedObject(self,@selector(property3));

}

-(void)MyClassExtension2

{

    NSLog(@"我是延展:myClassExtension");

}



@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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值