[ios读书总结]基础入门
1、ARC(automatic reference counting)自动内存回收机制现如今已经当做一种行业机制添加到LLVM编译器(Low Level Virtual Machine)中。
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者。
--From Baidu Baike
2、if条件判断
if(conditions) { //Then excute your code~~ }
只要conditions不是zero/nil/NULL,而是一些其他的参数值,分支结构中的代码都会运行。
另外编程风格上,推荐分支都是用 { ... }来封闭代码。
3、for循环
关于for循环,只有一点需要share一下:
NSArray *testArray = [[NSArrayalloc] init]; for (int i = 0; i <= testArray.count - 1; i++) { NSLog(@"I'm in~~"); }
从平常的逻辑来看,这个I'm in ~~应该是不能打印出来的,但是你可以尝试一下~
原因如下:
NSArray的Count~发现是一个NSUInteger类型,是一个无符号整型。
减一个数 等于 加一个数的补码
NSUInteger 0:0000 0000 0000 0000
int 1: 0000 0000 0000 0001
int 1 反码: 1111 1111 1111 1110
int 1 补码: 1111 1111 1111 1111
然后0-1就变成了 1111 1111 1111 1111
由于是无符号整形 数值等于 0111 1111 1111 1111,是int的最大值~~
所以以后大家写代码注意了哦~
4、方法重载
C++、java以及一些其他的高级语言都支持方法重载,这样程序员可以再一个对象上创建具有相同名称的不同的方法。然而,objective-c的方法重载与在C++中的重载不同,C++中重载一个方法,只需要保证同一种方法具有不同的参数数量或者至少一个参数具有不同的参数类型,而objective-c中你需要至少改变一个参数的名称,而更改参数的类型将导致无法工作。
比如:
- (void)method:(NSString *) param { //do something... } - (void)method:(int) param { //do something... } - (int)method:(NSString *)param { //do something... } changing the param type or the function return type will called a complied error~
5、类的二阶段创建alloc和init
MyClass *myClass = [MyClass alloc]; [myClass method];
上面的代码也是可以执行的,具体关于二阶段创建,我在明后天会单独的写出来。
6、类方法检测及类检测
1)使用NSObject的instancesRespondToSelector:类方法检测指定的selector是否存在类实例中。
2)使用NSClassFromString函数,传入类的名称字符串,若返回值为空nil,则表示这个类无法再这台装置上使用;反之,这个类则可照你希望的在这台装置上使用。(由于软件有时需要同时适配多种版本的操作系统,有的类是最新的操作系统版本才拥有的,这样就需要先进行检测,如果返回nil,使用替代方法)
7、申请、使用数字
用NSNumber类来用面向对象的方法处理数字,如果你只需要简单的数字而不是对象,可以使用NSInteger来操作有符号数,可以使用NSUInteger类来操作无符号数(正数或0),用CGFloat和double来操作浮点数。
8、关于数组
数组方面米有什么好说的,只是数组的排序用到了Blocks,最近比较忙,米有时间总结Blocks,大家可以暂且去developer.apple.com上看看Blocks的文档。
9、NSSet
如果需要存储一组对象但是每个对象只存一次,就可以用到NSSet。NSSet拒绝将同一个对象加入列表二次,一个set不仅仅比较对象在内存中的位置,而且比较这些对象的内容。
10、关于Bundle
Bundle的内容以前我在lofter写过,不再写了,详情见:http://avatar-matrix.lofter.com/post/e4689_236e82
11、NotificationCenter
关于NotificationCenter主要用到了观察者模式,我会在后续专门写一个文章来说NotificationCenter,并且实现自己实现一个MyNotificationCenter。
最近想把ios的一些基础知识过一遍,所以总结了上面的一些东东,不对的可以指正,我的邮箱 ItNoob@126.com。
上面列出的一些单独的文章,我在最近闲的时候会补上,请读者监督,谢谢~~
(By ItNoob.Matrix http://cnblogs.com/ItNoob)