黑马程序员-----Category,protocol和block(二)

来源:互联网 发布:东航淘宝旗舰店 编辑:程序博客网 时间:2024/06/06 17:07

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

Protocol专题

 //Button.h
 @protocol ButtonDelegate <NSObject>
 - (void)onclick:(Button *)btn;
 @end
 
 @interface Button : NSObject
 @property (nonatomic,retain) id<ButtonDelegate> delegate;
 
 - (void)click;
 @end
 
 //Button.m
 @impelmentation
 - (void)click
 {
    //如果delegate实现了onClick:方法
    if([_delegate responsToSelector:@selector(onClick:)])
    {
        [_delegate onClick:self];
    }
    else
    {
        NSlog(@"没有实现onClick:方法");
    }
 }
 @end
 
 //ButtonListener.h/m
 @interface ButtonListener : NSObject <ButtonDelegate>
 
 @end


 @implementation ButtonListener
 - (void)onclick:(Button *)btn
 {
    NSlog(@"%@按钮被点击了",btn);
 }
 @end
 
 //main.m
 
 int main(int argc, const char *argv[])
 {
    @autoreleasepool
    {
        //定义一个按钮
        Button *button = [[[Button alloc] init] autorelease];
        
        //定义一个按钮监听器
        ButtonListener  *listener = [[[ButtonListener alloc] init] autorelease];
        
        //设置按钮监听器delegate属性
        button.delegate = listener;
 
        //点击按钮
        [button click];
        
    }
    return 0;
 }
 
 1>概念
 Protocol简单来说就是一系列方法的列表,其中申明的方法可以被任何类实现。这种模式一般称为代理(delegation)模式。
 2>监听器思想
 用一个对象监听另外一个对象的改变。
 Button内部必须持有protocol的引用
 3>@required和@optional
 @required:要求必须实现,但是不实现编译器不报错
 @optional:选择实现,可以不实现
 4>responsToSelector:(SEL)和conformToProtocol:(Protocol *)
 responsToSelector:(SEL):判断对象是否实现了某个方法;参数描述:@selector(方法名)


---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

0 0
原创粉丝点击