美文网首页
所谓的设计模式、[空]、32位与64位下的数字

所谓的设计模式、[空]、32位与64位下的数字

作者: dongyehu | 来源:发表于2016-02-19 14:53 被阅读127次

    我们可以吧设计模式,想象成一些物件之间的组合关系。就是当我们的APP或Library中有很多不同种类的物件是,我们怎么把这些物件组合合理的关系。

    常见的一些设计模式

    MVC Dlelegate Singleton Notifacation Center Factory Method

    为什么要使用设计模式

    1. 学习设计模式就是学习工程师的语言,使用设计模式就是与其他工程师沟通,让其他参与人可以快速理解整个软件的架构。
    1. 维护一些有年纪的软件,使用设计模式则能让我们想要改动的时候还有办法改得动。
    再谈Singleton
    //避免多线程环境下,instance 可能会被多次建立
    + (instancetype) sharedInstance{
        static MyClass *instance = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            instance = [[MyClass alloc]init];
        });
        return instance;
    }
    
    bool 与 BooL
     //iOS64位系统 & AppleWatch:BooL会定义成stdbool里的bool,就是int (0,1);bool和BOOL没什么区别
    //使用C++:stdbool里的bool会定义成C++的bool。
    //iOS32系统 & Mac OS X:BooL会被定义成一个char,而 BooL 和 bool,就是1个byte与4个byte的区别。
    //API 要求你传入BOOL时,那就传入 YES 或 NO。没什么非要传入 tru 或 false。
    // BOOL - NSNumber   @(YES),@(NO)
    
    NSLog(@"YES: %ld",sizeof(YES));     //1
    NSLog(@"true: %ld",sizeof(true));   //4
    
    NSInteger 与 NSUInteger

    严格来说 NSInteger 并不算是 Objective—C 的整数,它是 C语言的形态来代替数字的OC物件(包括NSNumber,NSDecimalNumber);NSInteger就是C的整数。

    #if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
    typedef long NSInteger;
    typedef unsigned long NSUInteger;
    #else
    typedef int NSInteger;
    typedef unsigned int NSUInteger;
    #endif
    
    //在iOS64位,NSInteger 被定义为 long,32位被定义为 int。
    //我们尽量使用NSInteger与NSUInteger,让编译器帮我们决定是32位还是64位整数。
    //使用浮点数,尽量使用 CGFloat,一样会在不同环境下,被当成32位或64位浮点数。
    
    NULL、nil、Nil...

    在Objective-C语言中,有多个代表[ ]的东西:

    • NULL
    • nil
    • Nil
    • NSNull
    • NSNotFound

    NULL 并不算是OC的东西,而是属于C语言。NULL就是 C语言的空指针,指向0的指针。绝大多数情况下,nil、Nil与NULL可以代替使用,当某个API需要你传入指针(void*)时,而不是id类型是,虽然可以传入nil,但是传NULL意义比较清楚。

    nil空的OC物件的指针,也一样指向0。如果我们建立了一个OC对象,当我们不需要这个对象的时候,便可以将它指向nil;我们可以对nil呼叫任何的OC method。
    我们注意在 Array 与 Dictionary 中使用 nil 的情况。在传入参数是,最后一个参数一定是nil。
    NSMutableArray 插入 nil 会 Crash。

    NSArray *a = [NSArray arrayWithObjects:@1,@2,nil,@3, nil];
    NSLog(@"a:%@",a);   //a:(1,2)
    

    nil 是 空的instance,那 Nil 则是 空的 class

    Class cls = NSClassFromString(@"myclass");
    if ( cls != Nil) {
        // Do somethings
    };
    

    NSNull 不同于NULL、nil、Nil,NSNull是 确实存在的OC物件 。前面讲我们无法再array与dictionary中插入nil,可以使用插入 [NSNull null] 这个物件来代表 [空]

    NSNotFound 表示 找不到这个东西的index。比如我们在呼叫Array的 indexOfObject: 或 String的 rangOfString:,当没有找到时,会返回NSNotFound。
    NSNotFound 是整数的最大值。32位下最大值是 2^31-1,64位是 2^63-1

    相关文章

      网友评论

          本文标题:所谓的设计模式、[空]、32位与64位下的数字

          本文链接:https://www.haomeiwen.com/subject/pvxvkttx.html