1.平台相关的数据类型
尽量使用这种平台相关的数据类型,而不是写int,double,float等基本类型,防止在不同的系统平台上,基本数据类型溢出的问题
2.使用int还是NSInteger
写for循环的时候,用int i = 0; i < n; i++ 吧,因为你知道i会不会溢出
3.NSNumber
使用NSNumber来表示基本数据类型
使用NSNumber来表示基本数据类型之更简洁的方法
从NSNumber里面取出基本数据类型
NSNumber和NSInteger之间的转化
4.集合类型的元素必须是OC对象
集合类型的元素必须是OC对象,而不能是标量值
所谓标量值,是指int,double等基本数据类型和NSInteger,NSUInteger,BOOL等平台相关数据类型。标量值,一般声明的时候不加星号,比如NSInteger a = 1;矢量值,一般声明的时候需要加星号,比如NSNumber *b = @1;
5.集合快速初始化的时候有个坑
Collection类,如NSArray,NSSet,NSDictionary等都是nil-terminated,所以使用类似下例的方式初始化的时候,注意一定要检查元素是否是nil啊
//事件上报 Norcy
NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys: _resultModel.keyWord?_resultModel.keyWord:@"", @"searchKeyword", nil]; //这里要检查是否是nil [QLReportCtlMgr reportStrID:@"video_jce_show_search_result_page" params:dic];
不然中间哪个元素是nil的时候,后面的元素就添加不上去了,那真的要表示nil的时候怎么办呢,除了上例的NSString使用了@""之外,还可以用NSNull这个类来代替nil
NSArray *array = @[ @"string", @, [NSNull null], @YES];
由于NSNull是一个单例,[NSNull null]返回的永远是同一个对象,所以可以使用以下方法判断Collection里面哪个是空的
for (id object in array)
{
if (object == [NSNull null])
NSLog(@"Found a null object");
}
6.快速枚举
数组之快速枚举
for (id eachObject in array)
{
NSLog(@"Object: %@", eachObject);
}
字典之快速枚举(注意是key哦)
for (NSString *eachKey in dictionary)
{
id object = dictionary[eachKey];
NSLog(@"Object: %@ for key: %@", object, eachKey);
}
高大上的NSEnumerator
for (id obj in [array objectEnumerator]) //正向
{
NSLog(@"%@", obj);
} for (id obj in [array reverseObjectEnumerator]) //反向
{
NSLog(@"%@", obj);
} while (id obj = [enumerator nextObject]) //nextObject+while
{
NSLog(@"%@", obj);
}
如果,你离不开for循环的下标
int index = ;
for (id obj in [array objectEnumerator]) //正向
{
NSLog(@"%@", obj);
index++;
}