zoukankan      html  css  js  c++  java
  • ObjectiveC 的一些记录

    前阵子同事把他的mac book pro借给了我,于是乎,除了没事摸几下这机器光滑的外壳外,顺便也学习了下Objective-C。由于一直以来主要的开发语言都是C++,而最近这mac电脑得归还了,这里就随便记录几条Objective-C的特点,免得白学。

     Objective-C中比较重要的概念:消息、ref count、protocol、category、selector

    • 消息:Objective-C中的消息类似于C++中调用类的方法,不同的是,Objective-C中可以对消息进行动态处理。比如消息处理 [instanceClassA methodFoo],若类A并没有实现Foo这个方法,那么可以通过resolveInstanceMethod来重定位类实例方法,若仍然无法处理消息,则还可以进一步通过methodSignatureForSelector和forwardInvocation来修改方法签名,转发给其他类实例处理。
    • ref count: Objective-C中继承NSObject的类即获得了免费的ref count机制,使用retain和release来控制引用次数,次数为0自动释放。Objective-C中还存在一个autoreleasePool,用于将autorelease的对象随时释放掉。C++一直以来许多bug都在内存的管理上,要么new出来的没有delete,要么delete掉了还在使用。Objective-C使用这种ref count来保证内存管理灵活性的同时减少了程序的出错机会。
    • protocol:这个其实比较好理解,在C++中就是有一堆纯虚函数的类(接口类),Objective-C中用协议这个词来表达接口感觉更贴切。不管是A还是B,只要遵循某个protocol,它们对外界所表现出来的功能就一致。Objective-C中就是利用protocol实现的delegate机制。
    • category:在C++中若要扩展一个类,那么就是继承它,然后加入新的方法。 Objective-C呢,比如要给类A扩展方法bar,直接写这个类的category,加入新的方法,然后包含这个头文件,调用 [a bar]。
    • selector:selector是Objective-C中类中方法的标识。Objective-C中每个类都有一个self,类似于C++中的隐含的this,用来指代自己。类中每个方法都会被编译器生成一个标识,用selector可以通过方法名来获取这个标识号。当Objective-C调用某个实例方法Foo时,其实是调用一个全局函数。这个函数Foo是如何找到的呢?其实就是用Foo这个方法名通过selector找到标识,然后调用Foo(self, params)。对于有继承关系的多态调用,比如类B继承类A,A继承NSObject,首先查找B有没有Foo,没有的话isa指针(Objective-C中实现多态的机制)转到类A,寻找A中是否有Foo,最终NSObject都没有找到的话走上述所说的消息动态处理的流程。

    Objective-C总体来说比C++要简单地多,不过如果不在Mac上开发应用程序的话,Objective-C就没有什么用武之地了。。。毕竟编程语言价值在于实用。所以学习Objective-C还需要学习os x上的cocoa框架、Application Kit,iOS上的UIKit。各种API。。。

  • 相关阅读:
    在UNITY中按钮的高亮用POINT灯实现,效果别具一番风味
    打包场景出错
    探讨 .NET 4 新增的 SortedSet 类
    error CS1010 CS8025 CS1012 CS1525 常见文档错误解决
    安卓机在按HOME键时,UNITY触发的APPLICATION_PAUSE事件
    有几个Pass,对象就会绘制几次
    华东师范大学2017年高等代数考研试题
    华东师范大学2017年数学分析考研试题
    无穷级数的收敛性
    南开大学2017年数学分析高等代数考研试题
  • 原文地址:https://www.cnblogs.com/innerspace/p/3104589.html
Copyright © 2011-2022 走看看