黑马程序员—Objective-C基础_block、协议

来源:互联网 发布:淘宝刷钻怎么刷 编辑:程序博客网 时间:2024/05/16 03:44
---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

block

封装一段代码,可以在任何时间执行
block声明
int (^Sum)(int,int);
block定义
int (^Sum)(int,int) = ^(int a,int b){
    return a + b;

定义一个block类型的变量,接收两个整型数据a,b,返回a+b的值
在block内部可以访问外部的变量,默认情况下,block内部不能修改外部的局部变量
如果需要修改局部变量的值,需要在局部变量的定义前加上__block关键字

利用typedef定义block类型
typedef int (^MyBlock)(int,int);
MyBlock b;
b = ^(int a,int b){
    return a + b;
}

block的使用
// blockMyBlock
typedef int(^MyBlock)(int,int);
int main()
{
    int a,b;
    a = 10;
    b = 10;
    __block int c;
    // blockblock
    MyBlock block = ^(int num1,int num2){
        // 
        c = 5;
        // block访
        num1 = a+c;
        return num1 + num2;
    };
    // block
    block(a,b);
    return 0;
}
block的用法和函数很像:
可以保存代码,有返回值,有形参,调用的方法也一样。

@protocol协议
用来声明大量方法,只要某个类遵守这个协议,就能拥有此协议中所有的方法声明。只要父类遵守某个协议,子类也遵守此协议。
协议的使用方法
@protocol 协议名称
// 方法列表
@end 
@interface 类名 : 父类<协议名称>
@end 

协议中的关键字
@required:表示方法必须实现,不是想,编译器会发出警告
@optional:表示方法不一定要实现

协议遵守协议
一个协议可以遵守其他多个协议,多个协议之间用逗号隔开
一个协议遵守了另一个协议,就相当拥有了该协议中的方法声明
@protocol 协议名称<协议1,协议2>
@end

基协议
NSObject是一个基类,任何类都继承自它。
NSObject也是一个基协议,最基本的协议。包括很多最基本的方法的声明,如:description、retain、release等
每个西恩的协议都要遵守基协议NSObject。

定义变量时指定变量要遵守的协议,如果不遵守相应的协议,编译器就会发出警告。
类名<协议名称> *变量名;
定义成员变量遵守协议
@property (noatomic,strong) 类名<协议名称> *属性名;

协议可以定义在单独的.h文件中,也可定义在某个类中。
如果协议只用在某个类中,应该把协议定义在该类中。
如果协议用在很多类中,则定义在单独的文件中。

协议的简单应用
#import <Foundation/Foundation.h>
// protocol1
@protocol protocol1 <NSObject>
@optional// run
(void)run;
@end
// protocol2 protocol1
@protocol protocol2 <protocol1>
@required// eat
(void)eat;
@end
// Personprotocol2
@interface Person : NSObject<protocol2>
@end
@implementation Person
// eat
(void)eat
{
    NSLog(@"");
}
@end
int main()
{
    // protocol2
    NSObject<protocol2> *p1 = [[Person alloc] init];
    
    // [p1 run]; runrun
    [p1 eat];
    
    NSObject<protocol1> *p2 = [[Person alloc] init];
    
    // [p2 eat]; // p2protocol1eat
    
    return 0;
}


 
协议可以定义在单独的.h文件中,也可定义在某个类中。如果协议只用在某个类中,应该把协议定义在该类中;如果协议用在很多类中,则定义在单独的文件中。

 ---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net 
0 0
原创粉丝点击