objective-c 快速学习1-意图实现之 函数指针和block

参考快速学习指南

为了快速掌握oc的基本语法,按照上面文章速度学习oc .大概用了4~5天时间。粗越了解下oc.只是粗越了解。

目的主要还是实践 这个 “学习理论”。并完善这个学习理论。

鬼知道以后还要学习多少语言呢?

1.数字处理:四则运算。

2.字符串处理:分割和组合。

3.集合处理:可变和不可变集合。 dictionary(oc没写例子)

4.对象和继承:人,雇员,老板, 放入集合并多态的表示他们的薪水和税收。

5.意图和实现的分离(事件):单个函数指针的实现(c风格和block)。一组函数指针的实现(protocal)

6.io的处理。没写

7.内存管理

//
//  main.m
//  practice
//  通过c的直接的函数指针,来实现意图和实现的分离。(不喜欢用回调来解释。回调在不同场合有不同用途,在这里不如直接说成意图和实现分离)
//  Created by liangshun on 18/5/30.
//  Copyright © 2018年 liangshun. All rights reserved.

#import <Foundation/Foundation.h>
//typedef int(* type_pfun) (int,int);//type_pfun 是某种函数指针 数据类型.
typedef void(*clickCallback) (int m);

void onClick_1(int m)
{
    NSLog(@"button funcont1:%i",m);
}

void onClick_2(int m)
{
    NSLog(@"button funcont2:%f",(float)m);
}


@interface MyButton : NSObject
@property clickCallback myCallBack;//我会实现一个意图,但具体实现可以在外部扩展。
-(void) Click:(int)m;
@end


@implementation MyButton
-(void)Click:(int)m
{
    self.myCallBack(m);
}
@end


int main(int argc, const char * argv[]) {
    int money=3;
    MyButton *submitButton=[MyButton new];
    submitButton.myCallBack=onClick_1;
    [submitButton Click:money];
    
    submitButton.myCallBack=onClick_2;
    [submitButton Click:money];
    return 0;
}
//
//  main.m
//  practice
//  block ,在意图和实现分离的场合中,是一种直接,简洁,但不可复用的写法。
//  Created by liangshun on 18/5/30.
//  Copyright © 2018年 liangshun. All rights reserved.

#import <Foundation/Foundation.h>

typedef void(^clickCallback) ();//定义一个block来表达意图。




@interface MyButton : NSObject
@property clickCallback myCallBack;//我有一个意图,但具体实现可以在外部扩展。
-(void) Click;
@end


@implementation MyButton
-(void)Click
{
    self.myCallBack();
}
@end


int main(int argc, const char * argv[]) {
    
    MyButton *submitButton=[MyButton new];
    int money=3;
    submitButton.myCallBack=^//直接写实现,不可复用,但是省去传参数的麻烦。
    {
        NSLog([NSString stringWithFormat:@"fun1:%i",money]);
    };
    [submitButton Click];
    
    submitButton.myCallBack=^
    {
        NSLog([NSString stringWithFormat:@"fun2:%f",(float)(money)]);
    };
    [submitButton Click];
    return 0;
}
原文地址:https://www.cnblogs.com/lsfv/p/9127985.html