在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Objective-C中 1、所有的类都必须继承自NSObject。 2、所有对象都是指针的形式。 3、用self代替this。 4、使用id代替void*。 5、使用nil表示NULL, 6、只支持单继承,不允许多重继承。 7、使用YES/NO表示TRUE/FALSE 8、使用#import代替#include, 8、用消息表示类的方法,并采用[aInstance method:argv]调用形式。 9、支持反射机制, 10、支持Dynamic Typing(动态类型), Dynamic Binding(动态绑定)和Dynamic Loading(动态加载)。 11、不支持命名空间机制。 动态特性 OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装、继承、多态。他具有静态语言的特性(如C++),又有动态语言的效率(动态绑定、动态加载等)。OC的动态特性表现为了三个方面:动态类型、动态绑定、动态加载。之所以叫做动态,是因为必须到运行时(run time)才会做一些事情。 Nullability 从版本的 llvm 6.1 (Xcode 6.3) 就已经支持。这个简版的 Optional ,没有 Swift 中 ? 和 ! 语法糖的支持 例如: @property (nonatomic, strong, nonnull) Sark *sark; @property (nonatomic, copy, readonly, nullable) NSArray *friends; Lightweight Generics Lightweight Generics 轻量级泛型,轻量是因为这是个纯编译器的语法支持(llvm 7.0),和 Nullability 一样,没有借助任何 objc runtime 的升级,也就是说,这个新语法在 Xcode 7 上可以使用且完全向下兼容(更低的 iOS 版本) 平时也得注意 协变性和逆变性 __covariant - 协变性,子类型可以强转到父类型(里氏替换原则) __contravariant - 逆变性,父类型可以强转到子类型(WTF?)
__kindof __kindof 这修饰符还是很实用的,解决了一个长期以来的小痛点,拿原来的 UITableView 的这个方法来说: - (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier; Objective-C中的命名前缀说明: NS-:NextStep CF-:Core Foundation CA-:Core Animation CG-:Core Graphics UI-:User Interface Objective-C中没有类的静态变量,只有全局变量 Objective-C中的数组NSArray可以保存不同类型的数据。 Objective-C也支持run-time时的类类型检查 用于判断该对象是否属于某个类或者它的子类(如下:) - (BOOL) isKindOfClass: classObj 用于判断该对象是否属于某个类(这里不包括子类)(如下:) - (BOOL) isMemberOfClass: classObj - (BOOL) respondsToSelector: selector 用于判断该对象是否能响应某个消息。这里,我们可以将@selector后面带的参数理解为C++中的函数指针。 注意: 1)不要忘了@ 2)@selector后面用的是(),而不是[]。
+ (BOOL) instancesRespondToSelector: selector 用于判断该类是否能响应某个消息。这是一个静态函数。
-(id) performSelector: selector :调用对象的selector方法。 conformsToProtocol 类似于respondsToSelector ,用于动态检查某个对象是否遵守某个协议。 Category:可以为一个已经存在的类添加一些新的功能,只能添加新的方法,不能添加新的数据成员,Category 的名字必须是唯一的 Protocol:相当于C++中的纯虚类 |
请发表评论