1.平台相关的数据类型

These types, like NSInteger and NSUInteger, are defined differently depending on the target architecture. When building for a 32-bit environment (such as for iOS), they are 32-bit signed and unsigned integers respectively; when building for a 64-bit environment (such as for the modern OS X runtime) they are 64-bit signed and unsigned integers respectively.

  尽量使用这种平台相关的数据类型,而不是写int,double,float等基本类型,防止在不同的系统平台上,基本数据类型溢出的问题

2.使用int还是NSInteger

For local variables, such as a counter in a loop, it’s fine to use the basic C types if you know that the value is within the standard limits.

  写for循环的时候,用int i = 0; i < n; i++ 吧,因为你知道i会不会溢出

3.NSNumber

  使用NSNumber来表示基本数据类型

NSNumber *magicNumber = [[NSNumber alloc] initWithInt:42];

NSNumber *unsignedNumber = [[NSNumber alloc] initWithUnsignedInt:42u];

NSNumber *longNumber = [[NSNumber alloc] initWithLong:42l];

NSNumber *boolNumber = [[NSNumber alloc] initWithBOOL:YES];

NSNumber *simpleFloat = [NSNumber numberWithFloat:3.14f];

NSNumber *betterDouble = [NSNumber numberWithDouble:3.1415926535];

NSNumber *someChar = [NSNumber numberWithChar:'T'];

  使用NSNumber来表示基本数据类型之更简洁的方法

NSNumber *magicNumber = @42;

NSNumber *unsignedNumber = @42u;

NSNumber *longNumber = @42l;

NSNumber *boolNumber = @YES;

NSNumber *simpleFloat = @3.14f;

NSNumber *betterDouble = @3.1415926535;

NSNumber *someChar = @'T';

  从NSNumber里面取出基本数据类型

int scalarMagic = [magicNumber intValue];

unsigned int scalarUnsigned = [unsignedNumber unsignedIntValue];

long scalarLong = [longNumber longValue];

BOOL scalarBool = [boolNumber boolValue];

float scalarSimpleFloat = [simpleFloat floatValue];

double scalarBetterDouble = [betterDouble doubleValue];

char scalarChar = [someChar charValue];

  NSNumber和NSInteger之间的转化

NSInteger anInteger = 64;

NSUInteger anUnsignedInteger = 100;

NSNumber *firstInteger = [[NSNumber alloc] initWithInteger:anInteger];

NSNumber *secondInteger = [NSNumber numberWithUnsignedInteger:anUnsignedInteger];

NSInteger integerCheck = [firstInteger integerValue];

NSUInteger unsignedCheck = [secondInteger unsignedIntegerValue];

4.集合类型的元素必须是OC对象

NSArray,NSSet and NSDictionary are used to manage groups of objects, which means any item you wish to add to a collection must be an instance of an Objective-C class.

If you need to add a scalar value, you must first create a suitable NSNumber or NSValue instance to represent it.

  集合类型的元素必须是OC对象,而不能是标量值

  所谓标量值,是指int,double等基本数据类型和NSInteger,NSUInteger,BOOL等平台相关数据类型。标量值,一般声明的时候不加星号,比如NSInteger a = 1;矢量值,一般声明的时候需要加星号,比如NSNumber *b = @1;

5.集合快速初始化的时候有个坑

If you do need to represent a nil value in one of the collection classes, you should use the NSNull singleton class

  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++;
}

  

《Programming with Objective-C》第七章 Values and Collections的更多相关文章

  1. Programming In Scala笔记-第七章、Scala中的控制结构

    所谓的内建控制结构是指编程语言中可以使用的一些代码控制语法,如Scala中的if, while, for, try, match, 以及函数调用等.需要注意的是,Scala几乎所有的内建控制结构都会返 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二) 代码工程地址: https:/ ...

  3. [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第二章~第七章

    在看完<Objective-C 程序设计 第6版>之后,看了一些关于iOS开发职位的面试题,发现自身基础非常是不牢,于是打算以查缺补漏的方式阅读还有一本关于Objective-C的基础书籍 ...

  4. [Effective Java]第七章 方法

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. Linux Shell 示例精解(第七章 gawk编程)转载

    第七章 gawk功能:gawk编程 7.1.1 数字和字符串常量     初始化和类型强制  在awk中,变量不需要定义就可以直接使用,使用一个变量就是对变量的定义.变量的类型可以试数字.字符串,或者 ...

  6. 第七章 DAO模式

    第七章 DAO模式 一.JDBC的封装 1.JDBC的封装: DAO位于业务逻辑和持久化数据之间,实现对持久化数据的访问.将数据库都封装起来,对外提供相应的接口 2.DAO模式的作用: 1.隔离业务逻 ...

  7. Android群英传笔记——第七章:Android动画机制和使用技巧

    Android群英传笔记--第七章:Android动画机制和使用技巧 想来,最 近忙的不可开交,都把看书给冷落了,还有好几本没有看完呢,速度得加快了 今天看了第七章,Android动画效果一直是人家中 ...

  8. 2018-11-27 中文代码示例之Programming in Scala笔记第七八章

    续前文: 中文代码示例之Programming in Scala学习笔记第二三章 中文代码示例之Programming in Scala笔记第四五六章. 同样仅节选有意思的例程部分作演示之用. 源文档 ...

  9. 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...

随机推荐

  1. Direct X和OpenGL是什么及有何区别

    摘自:http://mtoou.info/directx-opengl-shenme/ 提起图形和显卡,尤其是玩电脑游戏的时候(通常是安装时)很多人是不是立刻就想起了一个名词叫做Direct X,通常 ...

  2. 演示unity内存管理机制的缺陷

    概述 这是最近做项目时发现的一个内存管理机制上的一个缺陷,但是我并不知道这究竟是不是一个bug,因为他可以造成内存泄漏,但是却能避开野指针. 详细 代码下载:http://www.demodashi. ...

  3. Java注解总结

    注解是Spring和Mybatis框架所大量使用的技术,要想掌握框架相关技术,注解是必须要掌握的. 掌握注解的优势: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需 ...

  4. ado.net 调用带参数的存储过程

    String connString = "Data Source = localhost; Initial Catalog = hkjc;User ID = sa;Pwd = 123&quo ...

  5. Ruby 和 Python 分析器是如何工作的?

    你好! 我作为一名编写Ruby profiler的先驱,我想对现有的Ruby和Python profiler如何工作进行一次调查. 这也有助于回答很多人的问题:“你怎么写一个profiler?” 在这 ...

  6. 如何使用T-SQL备份还原数据库及c#如何调用执行? C#中索引器的作用和实现。 jquery控制元素的隐藏和显示的几种方法。 localStorage、sessionStorage用法总结 在AspNetCore中扩展Log系列 - 介绍开源类库的使用(一) span<T>之高性能字符串操作实测

    如何使用T-SQL备份还原数据库及c#如何调用执行? 准备材料:Microsoft SQL Server一部.需要还原的bak文件一只 一.备份 数据库备份语句:user master backup ...

  7. redis.windows.conf各项配置参数介绍 (九)

    # 默认情况下,redis不是在后台模式运行的,如果需要在后台进程运行,把该项的值更改为yes,默认为no daemonize:是否以后台daemon方式运行 # 如redis服务以后台进程运行的时候 ...

  8. hibernate 中多对多关系对象集合的保存

    多对多关系映射和一对多关系映射开发步骤差不多, 例子如下:员工和项目之间的关系,一个员工可以参与多个项目:一个项目可以有多个开发人员参与.因此是多对多的关系. 1 分析数据表 1.1)员工表 CREA ...

  9. mysql-connector-python 源码安装

    一.下载mysql-connector-python的源码包: 下载页面: https://dev.mysql.com/downloads/connector/python/ 我这下载的是mysql- ...

  10. Atitit.各种 数据类型 ( 树形结构,表形数据 ) 的结构与存储数据库 attilax 总结

    Atitit.各种  数据类型 ( 树形结构,表形数据  ) 的结构与存储数据库 attilax  总结 1. 数据结构( 树形结构,表形数据,对象结构 ) 1 2. 编程语言中对应的数据结构 jav ...