协议练习改成block

更改协议成block,运行,设置一个头文件person.h

#import <Foundation/Foundation.h>
@interface Person : NSObject

@property (nonatomic, copy) void (^brak)(void); //声明void类返回void的block类型的brak,
@property (nonatomic, copy) void (^tail)(void);   //@property同时声明变量
@property (nonatomic, copy) void (^run)(void);
- (void)playwithanimal;                                     //一个实例方法
@end

M文件中写方法

#import "Person.h"

@implementation Person

- (void)playwithanimal               //编写方法
{
    if(_brak)                       //如果_brak对像飞空,则_brak(),这_brak就是^block声明的方法
        _brak();
    if(_tail)
        _tail();
    if(_run)
        _run();

}

@end

最后在mian文件中运行

#import "ViewController.h"
#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    Person * person = [[Person alloc]init];    //person类中声明一个对象并初始化分配内存空间.
    person.brak = ^{                           //person指向brak的地址.block返回void,打印出字符
        NSLog(@"wang wang");                   //但是有个缺点,就是同样的brak,结果内容只能是一样的wangwang;                                               //如果通过协议,可以通过两个其他类而得到一个事例一样的方法中,实行的结果不一样
    };

    person.tail = ^{
        NSLog(@"roking tail");
    };
    person.run = ^{
        NSLog(@"the animal is running");
    };
    [person playwithanimal];                      //调用方法playwithanimal,则会运行其中的block,block返回

                                                               //中则会打印相关内容

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-08-04 01:39:52

协议练习改成block的相关文章

iOS协议、代理、Block和回调、类别

[协议](Protocol) //协议是用来规范接口,实现对象间交互的一种机制.类似于JAVA中的接口,可以模拟. 协议的权限 @optional//可选的 @required//必须的 [代理] 一.代理的概念 [注]代理是实现两个类的对象间通信的一种机制. [委托方]主动方 持有带协议的id指针,可以使用协议. [代理方]被动方 遵从协议,实现方法. 代理回调(反向传值) //当我们需要完成某个功能模块,但不知道使用功能模块的是哪个对象,通过协议,可以规定接收数据的对象通过哪个方法获得数据.

将UIAlertView的按钮点击代理方式改为Block形式

   block类似C语言的函数指针,但Blocks不是一个指针,而是一个不带名字的函数(匿名的代码块).在这里我就不赘述了,说说将UIAlertView的按钮点击代理方式改为Block形式.代码中定义的全局变量_index与本文主要内容无关,在下一篇,我会详细说明Block的相互引用问题 //控制器ViewController.h文件   1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UIViewController 4

sqlserver服务器名称改成本地IP地址登录

原文:sqlserver服务器名称改成本地IP地址登录 在安装sqlserver2008.2012等时选择的是默认实例,服务器名称也就是电脑的名称,特别是登录本地的数据库,需要输入电脑用户名称加上SQLEXPRESS 例如:zhangsan\SQLEXPRESS 而不是自己本机的ip地址:192.168.1.xx  内部网络别的电脑也无法访问. 问题就来了,如何修改服务器名称呢,改成用本地IP或者用户名\SQLEXPRESS登录sqlserver? 解决办法: 1.开始程序=>Microsoft

SSH框架Struts2.5之后遇到的坑 struts.xml不用通配符没问题,已改成通配符就报异常

本来也就是一个简单的登录的问题,然后我在这突然想用统配符了.然后...... 用没用通配符的两个anction如下 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org

kafka-connect-hdfs连接hadoop hdfs时候,竟然是单点的,太可怕了。。。果断改成HA

2017-08-16 11:57:28,237 WARN [org.apache.hadoop.hdfs.LeaseRenewer][458] - <Failed to renew lease for [DFSClient_NONMAPREDUCE_-1756242047_26] for 30 seconds. Will retry shortly ...> org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyE

Oracle中表列由VARCHAR2类型改成CLOB

情景 原来表中的列定义成VARCHAR2类型,众所周知,VARCHAR2类型最大支持长度为4000.假设因为业务须要.想把此列转换为CLOB类型,在Oracle中直接通过ALTER语句转换是行不通的.以下依据详细事例解说在Oracle数据库中怎样把表列由VARCHAR2类型转换为CLOB类型. 演示样例准备 1. 新建两张张表TB_WITHOUT_DATA(此VARCHAR2列不包括数据)和TB_WITH_DATA(此Varchar2列包括数据) create table TB_WITHOUT_

centos7/redhat7 将网卡名字改成eth样式的方法

centos7/redhat7 将网卡名字改成eth样式的方法 方法/步骤 1 编辑 /etc/sysconfig/grub 找到“GRUB_CMDLINE_LINUX”这一行 2 在rhgb前面,添加net.ifnames=0 biosdevname=0 3 在打开的终端上然后执行 grub2-mkconfig -o /boot/grub2/grub.cfg 4 用命令切换到/etc/sysconfig/network-scripts/网卡目录下,如图所示 5 我这里是有两个网卡信息,将ifc

把Ubuntu用户目录下的目录名改成英文

直接改名字是不行的,一重启就回去了 方法一: 把中文文件夹改成相应的英文文件夹,再修改配置文件 ~/.config/user-dirs.dirs XDG_DESKTOP_DIR="$HOME/Desktop" XDG_DOWNLOAD_DIR="$HOME/Downloads" XDG_TEMPLATES_DIR="$HOME/Templates" XDG_PUBLICSHARE_DIR="$HOME/Public" XDG_

bootstrap怎么设置下拉菜单不点击,改成鼠标悬停直接显示下拉菜单

方法一: 实际上比较简单,只需要加一个css设置下hover的状态,把下拉菜单设置成block,具体css:.nav > li:hover .dropdown-menu {display: block;} 但是主导航失去链接的效果! 方法二: 不仅可以解决Bootstrap鼠标悬停的问题,还可以让一个菜单恢复链接实现点击下拉菜单效果是JS实现的,分析bootstrap.js文件发现,Bootstrap把下拉菜单写成了一个JQuery插件,在dropdown代码段中找到了关键的几句:$(docum