zoukankan      html  css  js  c++  java
  • NSMutableArray,NSArray (From DFdou's Blog)

    首先,来看下2者的区别:

    NSArray and its subclass NSMutableArray manage collections of objects called arrays. NSArray creates static arrays, and NSMutableArray creates dynamic arrays.

    NSMutableArray是NSArray的子类,NSArray建立静态数组,而NSMutableArray则是动态数组.换句话说,NSArray建立之后不可修改,而NSMutableArray则可以修改.
    由于在ObjC中,简单的看下函数addObject,会发现数组的元素是id类型,也就是说是指针.

    1
    - (void)addObject:(id)anObject

    如此一来数组里就不能压入NSUInteger,BOOL之类的非指针型数据了,要命吧..
    那要压入这些内容怎么办呢?对,类型转换,ObjC提供了NSNumber来给大家转换用,NSNumber本身是个指针类型变量.
    Inherits from NSValue : NSObject
    来个简单的转换例子:

    1
    2
    3
    NSUInteger count = 1;
    NSNumber *j = [NSNumber numberWithInt:count];
    [ary addObject:j];

    还算明了吧,就是用到这个值的时候又要转换一次,...
    昨天刚好又用到数组的乱序,在网上找了个Sample修改了下,代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #pragma mark -
    #pragma mark (NSMutableArray *)randArray:(NSMutableArray *)ary
    - (NSMutableArray *)randArray:(NSMutableArray *)ary{
        NSMutableArray *tmpAry = [NSMutableArray arrayWithArray:ary];
        NSUInteger count = [ary count];
        for (NSUInteger i = 0; i < count; ++i) {
            int nElements = count - i;
            // Seed the random number generator
            srandom(time(NULL));
            int n = (random() % nElements) + i;
            [tmpAry exchangeObjectAtIndex:i withObjectAtIndex:n];
        }
        return tmpAry;
    }

    我不知道为什么每次random()每次的值都是一样的,非得在random()前要加个srandom(time(NULL))才能让编译器每次运行时有可能random()出不同的值.
    看网上介绍是让编译器生成一个新的随机数种子....
    有经验的大哥可以告诉下这样做的原因不=.=

  • 相关阅读:
    python-登录小游戏
    easyclick 学习
    PYQT5 学习
    Pycharm之QT配置
    标贴打印机的基本使用
    开发遇到的问题及其解决
    Datatable 数据源
    JIRA操作之JQL
    类视图函数 VIEW
    前端基础
  • 原文地址:https://www.cnblogs.com/shenfei2031/p/2129914.html
Copyright © 2011-2022 走看看