对于一门语言的历史,我认为写一本书可能都不为过,关键是看你如何介绍和表达。当然每一个人的理解也大相径庭。本文阐述也仅仅只是冰山一角,如果需要深入了解,自己可能需要多花费一些心思。

这里也不会给大家说太多的背景,对于编程来说好像也不是必须,所以我认为大概了解就可以。

说起Objective-C,它是苹果公司用于开发MAC OS X 和IOS 设备的主要编程语言。从语言命名来理解,必然会想到C语言,苹果官方定义是:superset of the C(超集) 其实可以理解为C语言的一种扩展,大家都知道C语言是面向过程的,一堆函数,可阅读性不好。而Objective-C则是面向对象的(object-oriented)语言,它在C语言的基础上扩展,继承了很多C语言的特性,比如一个很重要的概念:指针。当然Objective-C的诞生,还有一种语言的功劳,那就是SmallTalk-80,Objective-C也是借鉴了它的很多语法风格。有兴趣的可以去详细了解下。

我们再来看看苹果公司是如何发展Objective-C语言,先给大家看一张图:

这是NeXT(NeXT也是上任苹果计算机CEO,Steve Jobs在1985年离开苹果计算机后所创立的公司)研发的一种操作系统NeXTSTEP。后来,在1996年,苹果公司出于战略考虑收购了NeXT公司,自然乔帮主又回到了苹果公司。基于NeXTSTEP code library,苹果公司把它集成到了自己的系统中去,也就是现在的MAC OS X,可以说NeXTSTEP 为苹果mac系统的发展奠定了基础。有了MAC 这个强大系统的支持,苹果的手机系统也发展起来,也就是现在的IOS,其实它是MAC 系统延伸出来的,所以它的大部分code还是来自于NeXTSTEP code libary。那NeXTSTEP 核心code是什么呢? 就是我们今天我们说的Objective-C。苹果对OC语言开始扩展重写,增强了OC的语法功能,定义了OC版本2.0,即Objective-C 2.0。由于苹果产品的火热,后来OC便很快成为了开发MAC 和IOS 应用的编程语言,越来越多的开发者学习了该语言,老实说,OC的火热完全是苹果产品带动起来的,用户量大,开发者才去投入。个人感觉OC的语法风格相对于Java C#还是不够简洁。

题外话:有人说,学习Objective-C之前是不是需要学习C语言?我觉得这个还是有必要去了解的。当然也不一定非要从头到尾把C看一遍,做项目等。可以这样说,你可以初期只学习Objective-C,不看C语言,也同样可以。为什么这么说呢,学习本身就是一件很漫长的事情,关注的点太多,容易打消积极性,不知道大家有没有这种感觉,当你去尝试做一件事情的时候,发现做这件事情有很多条件,然后当你在去一个一个去完成这些条件的时候,时间已经很长了,精力也消耗很多,最后可能也不知道自己到底要做什么,容易迷茫,最终会有一种挫败感,久而久之自信心也就没了。当然,主要还是看你自己的实际情况,比如时间,精力等等。

建议还是直接去看Objective-C,在学习的过程中,有些概念不清楚的,可以再去看C语言。即用既查,反复交错进行。

后续我会一章一节的把OC语法详细的介绍一遍,如环境准备,Xcode等。基本上快的两周就可以掌握个大概,至少你能看懂code吧。还是那句话,写代码的捷径就是多练习。

像上面提的,一门语言的历史是很难三言两语说清楚的,大家如果有兴趣可以自己查阅。

这里我提供一些链接供大家参考:

Objective-C (维基百科比较全面) Apple Objective-C(苹果官方文档) 建议还是多看官网文档,比较全面系统。

学习 Object-C: 简史的更多相关文章

  1. JDK1.8源码学习-Object

    JDK1.8源码学习-Object 目录 一.方法简介 1.一个本地方法,主要作用是将本地方法注册到虚拟机中. private static native void registerNatives() ...

  2. 学习Object.assign()

    Object.assign()用于将所有可枚举的值从一个或多个源对象复制到目标对象.它将返回目标对象. 语法 Object.assign(target, ...source); var obj = { ...

  3. ES6学习--Object.assign()

    ES6提供了Object.assign(),用于合并/复制对象的属性. Object.assign(target, source_1, ..., source_n) 1. 初始化对象属性 构造器正是为 ...

  4. 源码学习-Object类

    1.Object类是Java所有类的超类 2.查看Object的属性和方法,发现Object类没有属性,只有13个方法,其中7个本地方法. 3.接下来看具体的方法 3.1 Object() 默认的构造 ...

  5. 第一天:python学习-基础-计算机简史

    第一天:计算机简史 1.元始的计算方式 : 1.1:数手指头,结绳记事.符号记事.算筹(祖冲之-圆周率).算盘:计算效率较低. 1.2:15世纪航海活动各天文需求 计算比较繁重,出现计算尺工具,奥特雷 ...

  6. PHP学习 Object Oriented 面向对象 OO

    定义类class class_name [extends partclass_name]{public private protected var property_name = value;publ ...

  7. Object C学习笔记24-关键字总结

    学习Object C也有段时间了,学习的过程中涉及到了很多Object C中的关键字,本文总结一下所涉及到的关键字以及基本语法. 1.  #import #import <> 从syste ...

  8. Object C学习笔记20-结构体

    在学习Object C中的过程中,关于struct的资料貌似非常少,查阅了C方面的资料总结了一些学习心得! 一. 定义结构 结构体是一种数据类型的组合和数据抽象.结构体的定义语法如下: struct ...

  9. Object C学习笔记17-动态判断和选择器

    当时学习Object C的时被人鄙视了一顿,说使用.NET的思想来学Object C就是狗屎:不过也挺感谢这位仁兄的,这让我学习的时候更加的谨慎.今天的学习笔记主要记录Object C中的动态类型相关 ...

随机推荐

  1. Netty中的装饰者模式

    装饰者的应用 所谓装饰者,说白了,目的就是对现有的对象进行增强,装饰者设计模式最大的优点就是,它在扩展类原有功能的基础上还避免的类爆炸的情况 Netty中的装饰者模式的应用 ByteBuf是netty ...

  2. Spring还可以这样用缓存,你知道吗?

    大家在项目开发过程中,或多或少都用过缓存,为了减少数据库的压力,把数据放在缓存当中,当访问的请求过来时,直接从缓存读取.缓存一般都是基于内存的,读取速度比较快,市面上比较常见的缓存有:memcache ...

  3. 装饰器和"开放-封闭"原则

    装饰器和"开放-封闭"原则 "开放-封闭"原则 软件开发中的"开放-封闭"原则,它规定已经实现的功能代码不应该被修改,但可以被扩展,即: 封 ...

  4. jProfiler远程连接Linux监控jvm、tomcat运行状态

    第一步.下载软件 官网地址:https://www.ej-technologies.com/download/jprofiler/files , Mac客户端 GUI界面 Linux服务端 第二步.安 ...

  5. 10G文件如何对里面单词出现排序

    10G文件如何对里面单词出现排序的问题(只要文件系统支持,不限大小). 其实这个问题很简单,10G文件是很大,但是出现的字符或单词是很有限的. 单字符只有那么一百多个,单词数量满打满算,以英文单词总数 ...

  6. helm安装MINIO文件服务器

    MinIO Quickstart Guide MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例 ...

  7. UE4 坐标系 坐标轴旋转轴

    Pitch是围绕Y轴旋转,也叫做俯仰角. Yaw是围绕Z轴旋转,也叫偏航角. Roll是围绕X轴旋转,也叫翻滚角. UE4里,蓝图中的rotation的三个依次为roll,pitch,yaw.C++中 ...

  8. Django settings.py 配置文件详解

    settings.py 配置文件 import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #引 ...

  9. 前端笔记之微信小程序(四)WebSocket&Socket.io&摇一摇案例&地图|地理位置

    一.WebSocket概述 http://www.ruanyifeng.com/blog/2017/05/websocket.html Workerman一款开源高性能异步PHP socket即时通讯 ...

  10. 3、数组的声明及初始化(test1.java)

    今天学习了,一位数组和二维数组,先学习了数组的申请,数组的初始化,数组的拷贝等.对于数组我认为,和C\C++中的数组,没有什么太大的区别,但是在JAVA中,大家都知道JAVA是面向对象的编程语言,每一 ...