zoukankan      html  css  js  c++  java
  • block和协议和foundation

    block

    1)用来保存一段代码

    2)block的标志:^

    例子:

    int sum(int a, int b){

    return a+b;

    }

    int (*p)(int, int) = sum;

    int (^sumblock)(int, int) = ^(int a, int b){

      return a+b;

    };

    int c = sumblock(10, 11);

    3)定义block变量:

    int (^sumBlock)(int, int);

    void(^myBlock)();

     如何利用block封装代码:

    ^(int a, int b){

    return a-b;

    };

    ^(){

    NSLog(@“————-”);

    };

    ^{

    NSLog(@“—————-”);

    };

    block访问外部变量:

    block内部可以访问外部变量

    默认情况下,block内部不能修改外面的局部变量

    给局部变量加上__block关键字,这个局部变量就可以在block内部修改

    利用typedef定义block类型:

    typedef int (^MyBlock)(int, int); //以后就可以利用MyBlock这种类型来定义block变量

    Myblock b3 = ^(int a, int b){

    return a - b;  

    };  //一条赋值语句结束后要加;

    17)#import “MyProtocol” //只要一个类遵守了某一份协议,就能拥有这份协议中的所有方法申明

    // 继承父类 :

    //   遵守协议 <>

            @interface Person:NSObject <MyProtocol>

    @required 要求实现,不实现就会发出警告

    @optional 不要求实现

    默认情况下是@required

    基本用途:

    》可以用来申明一大堆方法(不能申明成员变量)

    》只要某个遵守了这个协议,就相当于拥有这个协议中的所有方法申明

    》只要父类遵守了某个协议,就相当于子类也遵守类

    要求obj3保存点对象必须遵守是MyProtocol这个协议

    NSObject<MyProcol> *obj3 = [[NSObject a alloc] init];

    协议的定义:

    @protocol 协议名称 <NSObject>

      //方法申明列表。。。

    @end

    协议的遵守:

    1》类遵守协议:

    @interface 类名:父类名 <协议名称1,协议名称2>

    @end

    2》协议遵守协议

    @protocol 协议名称 <其他协议名称1,其他协议名称2>

    @end

    3》协议中方法申明的关键字

    1>@required(默认)

    要求实现,如果没有实现,会发出警告

    2>@optional

    不要求实现,怎样都不会有警告

    4》定义一个变量的时候,限制这个变量保存的对象遵守某个协议

    类名<协议名称>*变量名;

    id<协议名称>变量名;

    NSObobject<MyProtocol>*obj;

    id<MyProtocol>obj2;

    如果没有遵守对应的协议,编译器会警告

    5》@property中申明 的属性也可以做一个遵守的限制

    @property(nanatomic,strong)类名<协议名称>*属性名;

    @preperty(nanatomic,strong)id<协议名称>属性名;

    18>foundation框架

    NSString

    创建字符串:

    NSString *str = @“intheima”;

    NSString *str2 = [[ NSString alloc]initWithString:@“23132”];

    把c语言字符串转换成oc字符串

    [[NSString alloc] initWithUTF8String:(const char *)];

     常用方法:

    字符串中查找子串:NSRange range = [strangOfString:@:”https://”];

    判断字符串的前缀:BOOL hasp= [strhasPrefix:@“http”];

    等等。。。

    NSMutableString

    1.[NSMutableString stringWithFormat:@“jack”];

    2.[[NSMutableString appendString:@“jabkc”]];

    3.字符串删除[str deleteCharactersLnRange:NSMakeRange(1, 7)];

    4.字符串替换:

    [str replaceCharactersLnRange:range withString:@“ade”];

    5.插入字符串:

    [str insertString:@“sss”, atindex:6];

    OC集合类1

    1.NSArray,NSMuatlbeArray

    2.NSSet, NSMutableSet

    3.NSDictionary,NSMutableDictionary

    NSArray

    a.arrayWithObjects…

    b.array objectAtlndex:i;

    c.for(id obj in arryay){}

    d.enumerateObjectsUsingBlock…

    e.array containsObject:@“abc”

    f.NSArray *array = [str componentsSeparateByString:@“-”];

    g.[array componentsJoinedByString:@“-”];

    h.arrayWithContentsOfFile…..

    NSMutableArray

    NSMutablArray *array = [NSMutablArray array];

    集合的内存管理

    1.添加一个元素就会对这个 元素做一次retain

    2.删除一个元素就会对这个元素做一次release

    3.当数组被销毁时,数组中的所有元素都会做一次release

    array和set的区别:

    1.array的元素是有序的。set中的元素是无序的

    2.array允许存储的内容有相同的,set不允许存放相同的内容

    NSDictionary:不允许有两个相同的key

    允许有重复的value

    NSNumber

    将基本类型转换为对象

    1.NSNumber *num1 = [NSNumber numberWithLnt:20];

    2.int num = [num1 intValue];

    3.NSNumber *num = @10;

    OC新特性

    1.NSNumber : @23

    2.NSArray *array = @[@20,@“mike”,@2.3f];

    3.NSDictionary

    *dic = @{

    @“”name”:@“mike”,@“address”:@“北京”

    };

    NSValue

    NSNumber只能包装数值,不能用于封装结构体,NSValue用于封装结构体

    1.转成对象

    CGPoint p = CGPointMake(20, 20);

    NSValue *value = [NSValue valueWithBytes:&p

    objCType:@encode(CGPoint)];

    2.转回结构体:

    CGPoint p2;

    [value getValue:&p2];

    3系统自带的包装

    [value pointValue];

    NSDate

    1.返回一个比现在晚1000

    秒的时间

    [NSDate dateWithTimeLntervalSinnceNow:1000];

    2.随机返回一个将来的时间

    NSDate *date = [NSDate distanFuture];

    3.返回两个时间中比较晚多一个:

    [dae earlierDate:date2];

    4.返回两个时间中比较晚多一个

    [datelaterDate:date2];

    5.获取从1970到现在经过的毫秒数

    [date timelntervalSince 1970];

    6.获取当前时间

    [NSDate date];

    7.日期格式化

    NSDateFormatter *format = [[NSDate Formatter] alloc]init]autorrelease];

    format.dateFormat = @“yyyy=MM-dd HH:mm:ss”;

    NSString *str = [format stringFromDate:date];

    8.字符串转日期

    NSDateFormatter *format = [[NSDateFormatter] alloc] init] autorelease];

    format.dateFormat = @“yyyy-MM-dd HH:mm:ss”;

    NSDate *date = [format dateFromString:@“2011-09-07 12:11:34”];

  • 相关阅读:
    496 服务器渲染 VS 客户端渲染
    495 队列,优先级队列
    493 JS中数据类型检测的四种方案
    492 js的继承:原型继承,CALL继承,寄生组合式继承,ES6中的类和继承
    491 CALL和APPLY以及BIND语法(含BIND的核心原理),CALL和APPLY的应用(类数组借用数组原型方法),CALL源码解析及阿里面试题
    490 JavaScript的this的五种指向
    488 DOM0和DOM2事件绑定的原理、使用、区别
    487 函数的三种角色:普通函数,构造函数(类),普通对象,原型链清明上河图
    486 原型及原型链模式:3个重要知识点,从面向对象角度来讲解内置类,hasOwnProperty,原型链方法中的THIS问题,基于内置类的原型扩展方法
    485 面向对象:单例设计模式,工厂模式,什么是面向对象,构造函数,instanceof,构造函数中的局部变量以及new构造函数时不加括号
  • 原文地址:https://www.cnblogs.com/coolcold/p/4674384.html
Copyright © 2011-2022 走看看