zoukankan      html  css  js  c++  java
  • 浅析OC语言

    学习一门开发语言,首先要掌握的它的基本语法,这可能几天就能学会,但如果要融会贯通,就得去学习这门语言的框架和一些库,再结合一些项目的应用,这可能需要花几年的时间。
    OC是C语言的一个超集,是一门面向对象的语言,因为苹果的崛起而火,API主要是cocoa(OSX)和cocoatouch(iOS),GCC 和 Clang 都能编译OC,现在xcode使用的是Clang。
    OC的实现是建立在运行时机制(runtime system)之上的(runtime system 使用C写的),使它区别与C++编译时机制,简单来说就是OC代码执行的时候需要结合runtime library,实现它的功能。正是因为如此,我们调用runtime的一些接口,动态地给OC的类添加方法,成员变量,交换两个方法。这些是在C++无法实现的,C++的代码执行,在编译的时候就已经决定了。
    OC的内存管理,在OC没有像java那样的GC机制,它使用的是引用计数机制,下面细说:
    OC中定义一个对象: someClass *object = [[someClass alloc] init] ;
                                       someClass *otherObject = object;
    上面的代码表示在堆(heap)里面申请了一块内存地址,用于存储someClass的一个对象,然后在当前栈里面分配两个指针的内存大小,用来存储两个指向someClass内存地址的变量。栈里面分配的内存,随着栈被pop,内存自动释放,而heap里面,则是使用引用计数机制来管理,这种功能也是由runtime提供的,具体来说就是当有一个指针变量指向someClass对象在heap里面的地址时,这个对象的count就是1,上面代码中count就是2. 当这个对象的count变成0时,这个对象在堆中的内存就要被释放了。
    在OC中,实例对象只能存储在堆中,像下面这种在栈中为对象分配内存,是不行的:
    someClass objec = [[someClass alloc] init] ;   马上就会有interface type cannot be statically allocated 的错误。
    OC的引用计数机制分为手动引用计数(MRC)和自动引用技术(ARC),后者在2011年推出的,编译器在编译的时候自动的在代码中添加retain和release,前者需要开发者自己添加,相当麻烦,一不留神,内存泄漏。
     
    OC中所有的类都是继承自NSObject,而且只能是单一继承,而不能像C++那样能多重继承,这相对少了一些灵活性,但是OC提供了协议(protocol)弥补了这一缺陷。最近发布的swift,号称面向协议的编程,更是把协议发挥到淋漓尽致(具体可以观看wwdc视频https://developer.apple.com/videos/play/wwdc2015-408/)面向接口编程,而不是面向实现编程,一直是我们追求的(扯到设计模式了)。因为OC与C的关联,可以OC中,无缝使用C语法,OC还可以与C++组合成objective-c++,只需要把OC的.m文件改成.mm,编译器马上就可以识别为Objective-C++ source,所以可以在OC中使用C++的一些库,极大方便开发。
  • 相关阅读:
    原型模式
    单例模式-2(注册式单例)
    单例模式-1(懒汉式、饿汉式)
    PBKDF2加密的实现
    vue中获取客户端IP地址
    微信公众平台,监听用户输入及事件
    详解二叉树的遍历-前中后序遍历/层序遍历-递归/迭代
    联想小新pro关机变慢的解决办法
    MySQL自学笔记系列
    MySQL入门-首先搞清楚【数据类型】
  • 原文地址:https://www.cnblogs.com/song-jw/p/4964556.html
Copyright © 2011-2022 走看看