.h
#import "Student.h" // ()代表着是一个分类 // ()中的Tests是分类的名称 @interface Student (Test) // 分类只能扩展方法,不能增加成员变量 -(void)test; @end @implementation Student (Test) // 分类方法的实现 -(void)test{ NSLog(@"test方法"); } @end
#import <stdio.h> #import "Student.h" #import "Student+test.h" int main(int argc, const char * argv[]) { Student *stu=[[Student alloc]init]; [stu test]; //直接使用分类定义的方法 return 0; }
#import <Foundation/Foundation.h> @class Button; // 协议的声明可以写在需要使用的类声明中,也可以单独写一个文件。 // 一般如果只给一个类使用,就写在类声明中,如果多个文件使用,就单独写一个文件 // <>代表实现某个协议 @protocol ButtonDelegate<NSObject> -(void) onClick:(Button *)but; @end @interface Button:NSObject // delegate 按钮的监听器 @property (nonatomic,retain) id<ButtonDelegate> delegate; // 点击按钮 -(void)click; @end
#import "Button.h" @implementation Buttom -(void) dealloc{ [_delegate release]; [super dealloc]; } @end
#import <Foundation/Foundation.h> // 对协议进行提前声明,跟@class的用途是一致的 @protocol ButtonDelegate; @interface ButtonListener : NSObject<ButtonDelegate> -(void)onClick:(Button *)but; @end // 实现协议类中定义的方法 ButtonListener.m #import "ButtonListener.h" @implementation ButtonListener -(void)onClick:(Button *)but{ NSLog(@"按钮%@被点击了",but); } @end
#import <Foundation/Foundation.h> #import "Button.h" @interface MyListener : NSObject<ButtonDelegate> -(void)onClick:(Button *)but; @end
#import "MyListener.h" @implementation MyListener -(void)onClick:(Button *)but{ NSLog(@"这是MyListener的监听器"); } @end
#import <Foundation/Foundation.h> #import "Button.h" #import "ButtonListener.h" #import "MyListener.h" int main(int argc, const char * argv[]) { @autoreleasepool { // 初始化一个按钮 Button *but=[[Button alloc] init]; // 初始化一个按钮监听器,并复制给but but.delegate=[[ButtonListener alloc] init]; // 模拟点击按钮 [but click]; // 换一个按钮监听器 but.delegate=[[MyListener alloc] init]; // 模拟点击按钮 [but click]; } return 0; }
// 定义了一个blcok ,这个block返回int类型,接受两个int类型的参数
int (^Sum)(int,int)=^(int a,int b){ return a + b; }; int a = Sum(10,10); NSLog(@"%i",a); // 结合typedef 使用 typedef int(^MySum) (int,int); // 声明了一个blck变量 MySum sum=^(int a,int b){ return a + b; };
#import <Foundation/Foundation.h> @class Button; // typedef int(^MySum) (int,int); typedef void (^ButtonBlock) (Button *but); @interface Button : NSObject // block不需要* ,设置一个变量接收block代码段 @property (nonatomic,assign) ButtonBlock block; -(void)click; @end
#import "Button.h" @implementation Button -(void)click{ _block(self); } @end
#import <Foundation/Foundation.h> #import "Button.h" int main(int argc, const char * argv[]) { @autoreleasepool { Button *but=[[Button alloc] init]; // 把自己的block 传入but的block but.block=^(Button *but){ NSLog(@"这个%@按钮被点击了。",but); }; // 模拟按钮点击 // [but click]; } return 0; }