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()出不同的值.
看网上介绍是让编译器生成一个新的随机数种子....
有经验的大哥可以告诉下这样做的原因不=.=
posted on 2011-08-07 12:34 Cheney Shen 阅读(368) 评论(0) 编辑 收藏 举报