不管你信与不信!只要你学,10天我一定让你学会Objective-C
Objective-C是非常实用的语言。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反。Objective-C写成的程序通常不会比其原始码大很多。而其函式库(通常没附在软件发行本)亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。因此,Objective-C它完全兼容标准C语言(C++对C语言的兼容仅在于大部分语法上,而在ABI(Application Binary Interface)上,还需要使用extern "C"这种显式声明来与C函数进行兼容),而在此基础上增加了面向对象编程语言的特性以及Smalltalk消息机制。 [1]
Objective-C的最初版本并不支持垃圾回收。在当时这是争论的焦点之一,很多人考虑到Smalltalk回收时有漫长的死亡时间,令整个系统失去功用。Objective-C为避免此问题才不拥有这个功能。虽然某些第三方版本已加入这个功能(尤是GNUstep), Apple在其Mac OS X 10.3中仍未引入这个功能。
虽然Objective-C是C的超集,但它不是C的基本类型为第一级的对象。
异同
Objective-C同C++的异同:
和C++不同,Objective-C不支持运算子重载(它不支持ad-hoc多型)。亦与C++不同,但和Java相同,Objective-C只容许对象继承一个类别(不设多重继承)。Categories和protocols不但可以提供很多多重继承的好处,而且没有很多缺点,例如额外执行时间过重和二进制不兼容。
Objective-C和C++的比较
单一继承:
和Java、Smalltalk一样,Objective-C不支持多重继承,而C++语言支持多重继承。
动态:
Objective-C是动态定型(dynamicaly typed),它的类库比C++容易操作。Objective-C 在运行时可以允许根据字符串名字来访问方法和类,还可以动态连接和添加类。
C++ 跟从面向对象编程里的Simula 67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。
在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objective-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。 而Smalltalk学派更灵活,比如一些Smalltalk 看来无误的程序拿到Simualr67那里就无法通过。
从很多方面来看,C++和Objective-C的差别,与其说是技术上的, 不如说是思维方式上的。你是否想更安全而舍弃灵活性?Simular67学派的支持者称既然程序设计出色何必再要灵活性,而 Smalltalk学派则称为了灵活可以容忍运行时多出错。
优缺点
Apple在其Mac OS X 10.3中仍未引入垃圾回收这个功能。不过令人欣慰的是在Apple发布的Xcode4中已经支持自动释放(不等同于严格意义上的垃圾回收,因为两者机制不同)。在Xcode4中的自动释放,也就是ARC(Automatic Reference Counting)机制,不需要用户手动去Release一个对象,而是在编译期间,编译器会自动帮你添加[NSObject release]。
另一个问题是Objective-C不包括命名空间机制(namespace mechanism),取而代之的是程序设计师必须在其类别名称加上前缀,时常引起冲突。在2004年,在Cocoa编程环境中,所有Mac OS X类和函数均有“NS”作为前缀,例如NSObject或NSButton,以表明它们属于Mac OS X核心(使用“NS”是由于这些类和函数在NeXTSTEP开发时定下的)。
虽然Objective-C是C的超集,但它不视C的基本型为第一级的对象。
由于Objective-C使用动态运行时类型,而且所有的方法都是函数调用(有时甚至连系统调用(syscalls)也如此),很多常见的编译时性能优化技术失效(例如:内联函数、常数传播、交互式优化、纯量取代与聚集等)。这使得Objetive-C性能劣于类似的对象抽象语言(如C++)。不过Objective-C拥护者认为既然Objective-C运行时消耗较大,Objective-C本来就不应应用于C++或Java常见的底层抽象。
下面是柠檬为大家整理的10天搞定Objective-C的自学路线和视频教程!
第一天
01.OC简介_面向对象概念
02.感受面向对象
03.OC的HelloWorld
04.类的构建_对象的创建和使用
05.分离接口
06.SET_GET方法
07.多参数方法的使用和意义
08.带参构造方法
09.不带参构造方法
第二天
01.day1-课后作业
02.属性的概念_属性关键字
03.属性关键字
04.属性的补充说明
05.继承的作用
06.继承语法_重写
07.成员变量的权限
08.day2-练习2
第三天
01.day2-作业1
02.类别的语法
03.类别的作用
04.类扩展
05.使用复合
06.Description和类方法
07.Foundation常用方法
第四天
01.懒加载
02.书签添加业务逻辑
03.书签类设计_业务逻辑分层
04.数组排序
05.自定义对象的排序
06.多属性比较的数组排序
07.单例模式
08.Item添加排序功能
第五天
01.电话号码本设计
02.多态的概念
03.多态的问题处理
04.解档和归档
05.沙盒路径和应用程序束
06.异常处理
第六天
01.学生类设计
02.ClassManager本地存储功能
03.NSDate
04.NSFileManager
05.NSFileHandle
第七天
01.可变字符串
02.类簇
03.字符串操作函数
04.字符串构建
第八天
01.数组初始化
02.数组操作
03.字典对象的初始化
04.字典
第九天
01.代理解决什么样的问题
02.反向代理
03.深复制和浅复制
04.委托模型
05.协议的语法
06.正向传值和反向传值
第十天
01.复合对象的内存管理
02.内存管理常见问题
03.内存管理黄金法则
04.深化多对象的内存管理
05.循环引用
06.自动释放池
07.block基本语法
08.block内存管理
09.block作为函数参数
10.strong&weak