1,oc类:
返回值类型用()包住,也可不声明返回值,编译器会自动添加一个id类型的返
回值。因此不推荐不写返回值,如果没有直接写(void)
参数定义:方法名字后面继续加:符号,表示参数。同样是()包住类型后面写变量名称,如果有多个,则依次书写即可。
- (返回值类型)方法名字:(变量类型) 变量名字 标签1:(变量类型) 变量1名字;
2,委托代理:既为某对象处理特定的事情的类
//h文件 #import <Foundation/Foundation.h> @class Button; // <>代表实现某个协议 @protocol ButtonDelegate <NSObject> - (void)onClick:(Button *)btn; @end @interface Button : NSObject // delegate就是按钮的监听器 @property (nonatomic, retain) id<ButtonDelegate> delegate; // 点击按钮 - (void)click; @end //m文件 #import "Button.h" @implementation Button - (void)dealloc { [_delegate release]; [super dealloc]; } - (void)click { // 如果_delegate实现了onClick:这个方法 if ( [_delegate respondsToSelector:@selector(onClick:)] ) { // 按钮被点击了,就应该通知监听器.并且告诉监听器哪个按钮被点击了 [_delegate onClick:self]; } else { NSLog(@"监听器并没有实现onClick:方法"); } } @end
//h文件 #import <Foundation/Foundation.h> @protocol ButtonDelegate; @interface MyListener : NSObject <ButtonDelegate> @end //m文件 #import "MyListener.h" #import "Button.h" @implementation MyListener - (void)onClick { NSLog(@"MyListener已经监听到按钮被点击了"); } - (void)onClick:(Button *)btn { NSLog(@"MyListener已经监听到按钮-%@被点击了", btn); } @end
//main文件 #import <Foundation/Foundation.h> #import "Button.h" #import "ButtonListener.h" #import "MyListener.h" int main(int argc, const char * argv[]) { @autoreleasepool { // 初始化一个按钮 Button *button = [[[Button alloc] init] autorelease]; MyListener *listener = [[[MyListener alloc] init] autorelease]; // 设置按钮的监听器 button.delegate = listener; NSLog(@"button:%@", button); // 点击按钮 [button click]; Button *button2 = [[[Button alloc] init] autorelease]; button2.delegate = listener; NSLog(@"button2:%@", button2); // 点击button2 [button2 click]; } return 0; }