A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wtj900 中级黑马   /  2015-9-2 23:50  /  1073 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

typedef  void (^myblock) (int)
定义block新类型为什么能这样写?
typedef定义类型的格式不是(typedef   旧类型   新类型)吗?

9 个回复

倒序浏览
你这个的意思是 把void (^myblock)这个你自己定义的类型改名为int吧,话说这个真的对吗?
回复 使用道具 举报
这个跟typedef 一个函数指针类似吧,都是  typedef 返回类型(*或者^  类型名称)(参数类型,.....)
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        typedef  void (^myblock) (int);//定义了返回void有一个整型参数的block类型myblock
        myblock test = ^(int a){//利用myblock类型定义了一个指针变量test指向一个块,该块有一个整型参数a,返回void
            NSLog(@"%i",a);};
        test(3);//使用这个块,传入参数3
    }
    return 0;
}
2015-09-03 09:25:00.127 test111[565:17774] 3
回复 使用道具 举报
1wang2huan 发表于 2015-9-3 08:46
你这个的意思是 把void (^myblock)这个你自己定义的类型改名为int吧,话说这个真的对吗? ...

我的意思是把void (^) (int) 类型取名为myblock,为什么可以这样做?求指教。
回复 使用道具 举报
yibyli 发表于 2015-9-3 09:37
这个跟typedef 一个函数指针类似吧,都是  typedef 返回类型(*或者^  类型名称)(参数类型,.....)
#import

是啊,我知道这一点,但我不太明白的是,为什么可以这样定义,应该怎样和普通的typedef联系在一起?求指教。

点评

你这个是java吧?  发表于 2015-9-3 20:42
回复 使用道具 举报
wtj900 发表于 2015-9-3 20:08
是啊,我知道这一点,但我不太明白的是,为什么可以这样定义,应该怎样和普通的typedef联系在一起?求指 ...

有时候没必要钻牛角尖的,经常用的话自然就明白了,如果非要求个理解的话,就当它是一般现象中的特殊现象吧
回复 使用道具 举报
你看一下这个这个帖子吧,希望对你帮助!

typdef的用法总结
http://bbs.itheima.com/thread-235097-1-1.html

回复 使用道具 举报
这问题真的是钻牛角尖了……
回复 使用道具 举报
typedef就是重新取一个名字,你用的是block定义的变量,
block本身定义变量的形式就是void (^myblock) (int);//定义了返回void有一个整型参数的block类型myblock
然后你再用typedef定义block类型,形式就是typedef  void (^myblock) (int)
这样变量的类型就是myblock,你再重新定义变量名
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马