NSMutableArray,NSArray
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类型,也就是说是指针.
- (void)addObject:(id)anObject
如此一来数组里就不能压入NSUInteger,BOOL之类的非指针型数据了,要命吧..
那要压入这些内容怎么办呢?对,类型转换,ObjC提供了NSNumber来给大家转换用,NSNumber本身是个指针类型变量.
Inherits from NSValue : NSObject
来个简单的转换例子:
NSUInteger count = 1;
NSNumber *j = [NSNumber numberWithInt:count];
[ary addObject:j];
还算明了吧,就是用到这个值的时候又要转换一次,...
昨天刚好又用到数组的乱序,在网上找了个Sample修改了下,代码如下:
#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()出不同的值.
看网上介绍是让编译器生成一个新的随机数种子....
NSArray与NSSet
NSArray:有序的集合,存储的元素在一个整块的内存中并按序排列;
NSSet:无序的集合,散列存储。
读developer.apple关于NSSet的解释:You can use sets as an alternative to arrays when the order of elements isn’t important and performance in testing whether an object is contained in the set is a consideration—while arrays are ordered, testing for membership is slower
than with sets.
就是说,如果搜索一个元素,NSSet的效率会比NSArray高。为什么呢?道理比较简单:hash!NSSet中元素的存储和访问都是一个hash的过程。比如你要存储元素A,一个hash算法直接就能直接找到A应该存储的位置;同样,当你要访问A时,一个hash过程就能找到A存储的位置。而对于NSArray,若想知道A到底在不在数组中,则需要一个一个元素比较,显然效率没了。
分享到:
相关推荐
NSArray和NSSet通常比NSMutableArray和NSMutableSet更高效,因为它们是线程安全的,适合多线程环境。而当涉及到查找操作时,NSDictionary通常比NSArray和NSSet更快,因为它可以通过键进行O(1)的复杂度查找。 在使用...
这些类包括NSArray、NSSet、NSEnumerator和NSDictionary,以及它们的可变版本NSMutableArray、NSMutableSet和NSMutableDictionary。这些类提供了各种操作来处理对象的集合,如添加、删除、查找等。以下是关于这些类...
IOS 开发之 NSMutableArray 与 NSArray 的区别 在 IOS 开发中,NSMutableArray 和 NSArray 是两个非常重要的集合类,它们都是 Foundation 框架的一部分。在本文中,我们将详细介绍 NSMutableArray 和 NSArray 的...
在iOS编程中,NSArray、NSDictionary和NSSet是常用的集合类,它们提供了存储和操作对象的方式。这些集合类在实际开发中扮演着重要角色,理解和优化它们的使用能够显著提高代码的性能和准确性。以下是对这些集合类...
NSArray可以与NSSet、NSDictionary等其他集合类相互转换。例如,将数组转换为NSSet: ```objc NSSet *set = [NSSet setWithArray:array]; ``` 八、枚举协议 NSArray实现了NSFastEnumeration协议,允许其与其他...
本篇文档主要总结了OC中基础的集合类型,包括数组(NSArray和NSMutableArray)以及字典(NSDictionary)和集合(NSSet)。这些知识点对于初学者来说是非常实用的。 首先,我们来关注OC中的数组。数组分为两种类型:...
Objective-C中的集合类还包括NSArray和NSMutableArray,它们分别对应于有序且不可变和有序且可变的集合。与NSSet不同,这些类允许重复的元素,但提供了线性的访问方式。数组操作通常比集合操作更容易理解和控制,...
本篇文章将探讨Objective-C中的数组,特别是NSArray、NSSet和NSDictionary等集合类的内存布局,并通过对比Swift的改进来阐述如何更安全地处理数组。 首先,Objective-C中的NSMutableArray是一种可变的数组类型,它...
在Objective-C的Foundation框架中,除了常见的NSArray、NSSet和NSDictionary等容器类,还有一组针对内存管理策略更加灵活的类,即NSPointerArray、NSHashTable和NSMapTable。这些类在特定场景下提供了更高效、更灵活...
在Objective-C中,Foundation框架提供了多种用于收集Cocoa对象(即`NSObject`对象)的集合类,其中最重要的是`NSArray`、`NSSet`和`NSDictionary`。 #### NSArray: 有序集合 `NSArray`是一种用来存储对象的有序...
在Objective-C中,字符串被封装在NSString类中,数组由NSArray和NSMutableArray类来管理,字典则由NSDictionary和NSMutableDictionary来实现,而集合则由NSSet和NSMutableSet来表示。此外,还提供了快速枚举等便捷的...
3. **NSSet与NSMutableSet** - NSSet:不可变集合,存储无序的唯一对象。 - NSMutableSet:可变集合,继承自NSSet,可以添加、删除元素。 4. **NSString** - NSString是不可变的字符串类,提供大量的字符串操作...
iOS中的集合对象,如NSArray、NSMutableArray、NSSet、NSMutableSet、NSDictionary和NSMutableDictionary,它们各自提供了不同时间复杂度的接口方法。NSArray和NSMutableArray由于维护有序性和允许重复元素,某些...
Objective-C 的 fast enumeration 是一种高效的遍历方式,它支持对 NSArray、NSMutableArray、NSSet、NSOrderedSet 和 NSDictionary 的遍历。示例如下: ```objc for (NSString *fruit in array) { NSLog(@"%@",...
3. **NSSet与NSMutableSet**:NSSet是不允许重复元素的集合,而NSMutableSet则支持动态添加和删除元素。它们不保证元素的顺序,但提供快速查找。 4. **遍历与操作**:集合类库通常提供各种遍历方法,如`...
- 数组与集合:深入学习NSArray、NSMutableArray、NSSet、NSMutableDictionary等容器类的使用。 - 字典:掌握NSDictionary、NSMutableDictionary的创建和操作,以及KVC(Key-Value Coding)和KVO(Key-Value ...
- **NSArray、NSSet、NSDictionary**:掌握这些集合类的使用,包括添加、删除元素等常见操作。 2. **学习Block和委托**: - **Block语法**:理解Block的概念及如何使用它们简化代码。 - **委托模式**:学习如何...