block块和Protocol(协议)

代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。

脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:


按照调用函数的方式调用块对象变量就可以了:
int result = myBlock(4); // result是 28



1、参数是NSString*的代码块

[cpp]  view plain  copy
  1. void (^printBlock)(NSString *x);  
  2. printBlock = ^(NSString* str)  
  3. {  
  4.     NSLog(@"print:%@", str);  
  5. };  
  6. printBlock(@"hello world!");  
运行结果是: print:hello world!

2、代码用在字符串数组排序

[cpp]  view plain  copy
  1. NSArray *stringArray = [NSArray arrayWithObjects:@"abc 1", @"abc 21", @"abc 12",@"abc 13",@"abc 05",nil];  
  2. NSComparator sortBlock = ^(id string1, id string2)  
  3. {  
  4.     return [string1 compare:string2];  
  5. };  
  6. NSArray *sortArray = [stringArray sortedArrayUsingComparator:sortBlock];  
  7. NSLog(@"sortArray:%@", sortArray);  
运行结果: sortArray:(

    "abc 05",

    "abc 1",

    "abc 12",

    "abc 13",

    "abc 21"

)


3.最为关键是对象之间的传值操作

typedef void(^MyBlock)(NSString *str,int num);  /// 1. 声明


@property (nonatomic,strong)MyBlock selectButtonAtIndex; // 定义变量


 typeof(self)__weak weak = self;                               //在需要的地方传值

 weak.selectButtonAtIndex(sender.titleLabel.text,sender.tag );



    xiao.selectButtonAtIndex = ^(NSString * num,int count) {     ///   在接受值得地方 接受

                NSLog(@"-----MMMMM----%@-----%d", num,count );

            };


二、Protocol(协议)

(一)简介

5.OC不能继承多个类(单继承)但是能够遵守多个协议。继承(:),遵守协议(< >

6.基协议:<NSObject>是基协议,是最根本最基本的协议,其中声明了很多最基本的方法。

7.协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明。

用法

(1)XX.h

#import <UIKit/UIKit.h>


///   声明协议

@protocol MainViewControllerDelegate <NSObject>


-(void)dissMiss;

@end

@interface MainViewController : UIViewController


///  定义协议属性

@property (nonatomicassign)id <MainViewControllerDelegate>delegate;


@end


XX.m

-(void)buttonAction

{

    ///   在想调用的地方调用

    if ([_delegate respondsToSelector:@selector(dissMiss)]) {

        [_delegate dissMiss];

    }

   

}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值