Java和OC中的数据容器和数组
在文章List/Set/Map的区别里我们讨论了Java的数据容器,由于其面向接口的编程特性,让我回忆了一下OC里面的「NSArray」和「NSMutableArray」,于是打开Xcode看了看定义
什么是数据容器
先说数据容器和数组的区别
- 在数组实例化时,长度必须时确定的,而且不具备增加或者删除元素的方法。
- 而数据容器就是实现了动态的数组,具有统一的增加或删除元素的逻辑,内存不确定,由容器自动来管理内存。
Xcode中的定义
现在来看看Cocoa里的定义,原来Mutable是继承于不可变的一个子类
@interface NSArray<__covariant ObjectType> : NSObject <NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration>
@end
@interface NSMutableArray<ObjectType> : NSArray<ObjectType>
@end
其中有个
@protocol NSFastEnumeration
- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id __unsafe_unretained [])buffer count:(NSUInteger)len;
@end
感觉看上去很像Java的「public interface Iterator
在使用上的区别
感觉在Java里的数组对应就是不可变NSArray,只不过NSArray其实是个数据容器,虽然不可变,但是可以填充任何Object。
而Java的数据容器,对应着NSMutable的数据容器,而且比起来OC有更具体的实现方法
Apple大法好
虽然我觉得Java功能更强大,但是在直接使用上新用户会比较迷茫和麻烦,还是Apple总结的好,搓逼你就用Array就好了,算法都由我们高端的Engineer来实现,你不用关心。感觉就和iPhone一样,千万不要买小米!!