iOS前期OC训练OC_10Block

来源:互联网 发布:天津会员卡软件 编辑:程序博客网 时间:2024/05/17 04:37

//

//  main.m

//  OC10_Block

//

//  Created by dllo on 15/7/28.

//  Copyright (c) 2015 Clare. All rights reserved.

//


#import <Foundation/Foundation.h>

#import "Person.h"


// C语言的函数

//NSInteger maxValue(NSInteger a, NSInteger b)

//{

//    return a > b ? a : b ;

//}


void test1()

{

   NSLog(@"今天好热");

}


int addNum(int a,int b){

   return a + b;

}


typedef int DT;

// 新的类型写在*的后面

typedef int (*PFUN)(int,int);


typedefNSString *(^Block)(NSArray *);


// 有返回值,无参数

typedefNSInteger (^Integer)();


int main(int argc,constchar * argv[]) {

   

//    //

//    int a = 10;

//    NSLog(@"%p", &a);

//    //

//    int *p = malloc(40);

//    NSLog(@"%p", p);

//    // 全局静态区

//    static int b = 10;

//    NSLog(@"%p", &b);

//    // 常量区

//    char *str = "iPhone";

//    NSLog(@"%p", str);

//    // 代码区

//    NSLog(@"%p", maxValue);

//    

//    // 函数指针的类型

//    NSInteger (*pointer)(NSInteger, NSInteger) = maxValue;

//    NSLog(@"%p", pointer);

//    NSLog(@"%ld", maxValue(10, 5));

//    // 函数指针的调用

//    NSLog(@"%ld", pointer(10, 5));

    

    //// Block的四种形式

    /// 1.无参数,无返回值

//    void (^block)() = ^(){

//        NSLog(@"今天有点云");

//    };

//    

//    // block的使用

//    block();

    // block自己不会执行,必须调用才会执行block大括号里的代码段


    /// 2.有参数,无返回值

//    void (^block)(int, int) = ^(int a, int b){

//        int max = a > b ? a : b;

//        NSLog(@"%d", max);

//    };

//    

//    // 调用

//    block(10, 20);

    // void (^)(int, int) block的类型,它的名是block,我们也通过名进行调用

    

//    void (^block)(NSString *) = ^(NSString *str){

//        NSLog(@"%@", str);

//    };

//    block(@"nihao");

    

    //参数是一个数组,对数组进行遍历

//    void (^block)(NSArray *) = ^(NSArray *arr){

//       // NSLog(@"%@", arr);

//        for (NSString *str in arr) {

//            NSLog(@"%@", str);

//        }

//    };

//    block(@[@"2", @"3", @"5", @"4"]);

    

    /// 3.有返回值无参数

//    // 有返回值在函数的最后要加上return

//    int (^block)() = ^(){

//        return 100;

//    };

//    // block调用时没有参数也要加上括号

//    NSLog(@"%d", block());

    

    /// 4.有参数有返回值

//    NSString *(^block)(NSArray *, NSInteger) = ^(NSArray *arr, NSInteger index){

//        return arr[index];

//    };

//    NSLog(@"%@", block(@[@"1", @"2"], 1));

    

    //写⼀个返回值为整型参数为NSString(仅⼀个参)block,实现将字符串转换为整型的功能。

    //返回整数,参数字符串

//    NSInteger (^block)(NSString *) = ^(NSString *str){

//        return str.integerValue;

//    };

//    

//    NSLog(@"%ld", block(@"23436tsd245"));

    

    //参数日期的字符串,返回NSDate类型的日期对象

//    NSDate *(^block)(NSString *) = ^(NSString *dateStr){

//        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

//        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

//        return [formatter dateFromString:dateStr];

//

//    };

//    NSLog(@"%@", block(@"2015.7.28 10.54.23"));


    // block的函数段中更多使用参数,而返回值更多是调用一方使用

    

//    PFUN p = addNum;

//    NSLog(@"%d", p(10, 20));

    

    // 通过新的block写一个block

//    Block block = ^(NSArray *arr){

//        return arr[0];

//    };

    

    // block和局部变量

    // __block相当于给a一个在block中修改的权限,否则他只能取值,不能赋值

//    __block int a = 10;

//    void (^block)() = ^{

//    // void (^block)(void) = ^(void){

//        int b = 10 * a ;

//    //  a = 10 * a;

//        NSLog(@"%d", a);

//    };

//    block();

    

    // 通过block对数组进行遍历

//    NSArray *arr = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", nil];

//    // 系统的吧block

//    [arr enumerateObjectsUsingBlock:^(NSString *obj, NSUInteger idx, BOOL *stop) {

//        NSLog(@"%@", obj);

//    }];

//    

    // 系统的block的用法就是回车

    

//    Person *per = [Person baseWithName:@"媚神" Sex:@""];

//    NSLog(@"%@", per.name);

    

    //// 数组排序

    ///数组对字符串的排序

    // 不可变数组

//    NSArray *arr = @[@"haoshen", @"meishen", @"wenshen", @"xuanshen", @"shengshen"];

//    

//    // SEL是方法选择器,它是方法选择器的类型

//    NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)];

//    NSLog(@"%@", newArr);

//    NSLog(@"%@", arr);

    

    // 可变数组

//    NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"haoshen", @"meishen", @"wenshen", @"xuanshen", @"shengshen", nil];

//    

//    [arr sortUsingSelector:@selector(compare:)];

//    NSLog(@"%@", arr);

    

    // 对对象的排序

    // 新建4个人的对象

//    Person *per1 = [Person baseWithName:@"meishen" Sex:@"nv"];

//    Person *per2 = [Person baseWithName:@"haoshen" Sex:@"nan"];

//    Person *per3 = [Person baseWithName:@"shengshen" Sex:@"nan"];

//    Person *per4 = [Person baseWithName:@"jiashen" Sex:@"nan"];

//    NSArray *arr = @[per1, per2, per3, per4];

//    

//    // 以会员的昵称作为排序的依据

//    NSArray *newArr = [arr sortedArrayUsingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {

//        return -[obj1.name compare:obj2.name]; // return前加上-,变成逆向排序

//    }];

//    for (Person *per in newArr) {

//        NSLog(@"%@", per.name);

//    }

    

//    NSMutableArray *mArr = [NSMutableArray arrayWithObjects:per1, per2, per3, per4, nil];

//    [mArr sortUsingComparator:^NSComparisonResult(id obj1, id obj2

//    /*mArr sortUsingComparator:^NSComparisonResult(Person *obj1, Person *obj2*/

//        ) {

//        Person *per11 = (Person *)obj1;

//        Person *per22 = (Person *)obj2;

//        return [per11.name compare:per22.name];

//        

//    }];

//    

//    for (Person *per in mArr) {

//        NSLog(@"%@", per.name);

//    }

   return0;

}


//

//  BaseModel.h

//  OC10_Block

//

//  Created by dllo on 15/7/28.

//  Copyright (c) 2015 Clare. All rights reserved.

//


#import <Foundation/Foundation.h>


@interface BaseModel :NSObject

@property(nonatomic,copy)NSString *name;

@property(nonatomic,copy)NSString *sex;

- (id)initWithName:(NSString *)name

               Sex:(NSString *)sex;


+ (id)baseWithName:(NSString *)name

               Sex:(NSString *)sex;


@end


//

//  BaseModel.m

//  OC10_Block

//

//  Created by dllo on 15/7/28.

//  Copyright (c) 2015 Clare. All rights reserved.

//


#import "BaseModel.h"


@implementation BaseModel

- (id)initWithName:(NSString *)name

               Sex:(NSString *)sex

{

   self = [superinit];

   if (self) {

       self.name = name;

       self.sex = sex;

    }

    return self;

}


+ (id)baseWithName:(NSString *)name

               Sex:(NSString *)sex

{

    //多态的方式完成对象的创建

   id obj = [[[selfclass]alloc]initWithName:nameSex:sex];

   return obj;

    

}

@end

//

//  Person.h

//  OC10_Block

//

//  Created by dllo on 15/7/28.

//  Copyright (c) 2015 Clare. All rights reserved.

//


#import "BaseModel.h"


@interface Person :BaseModel


@end


//

//  Person.m

//  OC10_Block

//

//  Created by dllo on 15/7/28.

//  Copyright (c) 2015 Clare. All rights reserved.

//


#import "Person.h"


@implementation Person


@end





0 0
原创粉丝点击