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 -----------延展---------------
/*
延展的作用就是定义自己的私有方法
形式和类目相同,不必新建文件,只是把了为imun的interface文件放在你需要扩展的类的.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
#import "MyClass.h"
@interface MyClass ()
-(void)MyClassExtension2;
@end