一、对C的扩展

1. #import VS #include

C语言使用#include语句通知编译器应在头文件中查询定义。

OC中也可以使用#include,但几乎不这么用,而是使用#import。

#import <Foundation/Foundation.h>

(查看Foundation框架中的Foundation.h头文件)

#import是GCC编译器提供的,Xcode在编译OC、C和C++程序时都会使用。可以保证头文件只被包含一次,而不论此命令实际在文件中出现了多少次。

2. 框架

框架是一种聚集在一个单元的部件集合,包含头文件、库、图像、声音文件等。

苹果公司将Cocoa、Carbon、QuickTime和OpenGL等技术作为框架集提供。

Cocoa的组成部分有Foundation和Application Kit(AppKit)框架。

还有一个支持框架的套件,包含Core Animation和Core Image。

Foundation框架处理用户界面之下的层(layer)中的特性,例如数据结构和通信机制。

Foundation框架包含一百多个头文件,可在/System/Library/Frameworks/Foundation.framework/Headers/文件夹查看。

Xcode使用预编译头文件,一种经过压缩的、摘要形式的头文件,在通过#import导入这种文件时,加载速度非常快。

3. NSLog()

NSLog()相对于printf()添加了时间戳、日期戳和自动附加换行符('\n‘)等特性。

Cocoa对其所有函数、常量和类型名称都添加了“NS”前缀,说明来自Cocoa而不是其他工具包。(NS来自于苹果公司收购的NeXT公司)

4. @字符串

@“xxxx”双引号字符串前有一个@符号,表示为NSString类型的字符串。

有许多特性,例如:知道长度,与其他字符串比较,转换为整型值或浮点值,还有许多功能是使用C风格字符串无法实现的。

如果在NSLog()中传入C风格字符串,编译器会给出warning:passing arg 1 of `NSLog` from incompatible pointer type。

5. 布尔类型

C语言:bool,值为true或false。

OC:BOOL,值为YES或NO。编写Cocoa代码时要使用BOOL。

BOOL实际上是一种对带符号的字符类型(signed char)的定义(typedef),使用8位存储空间。YES定义为1,而NO定义为0(#define)。

OC并不将BOOL作为仅能保存YES或NO值的真正的布尔类型来处理,编译器将BOOL认作8位二进制数,YES和NO值只是一种约定。

如果不小心将一个长于1字节的整数值(如short或int)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。如果地位字节刚好是0(例如8960,十六进制为0x2300),BOOL值将会是0,即NO。

不要直接将BOOL值与YES比较。OC中1不等于YES,但NO就是0。

NSLog(@"Are %d and %d different? %@", 5, 5, boolString(areTheyDifferent)); //其中%@表示接收NSString指针。

二、面向对象编程OOP

Objective-C基础教程 笔记的更多相关文章

  1. jQuery官方基础教程笔记(转载)

    本文转载于阮一峰的博文,内容基础,结构清晰,是jquery入门不可多得的资料,非常好,赞一个. 阮一峰:jQuery官方基础教程笔记 jQuery是目前使用最广泛的javascript函数库. 据统计 ...

  2. python基础教程笔记—即时标记(详解)

    最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...

  3. php基础教程笔记

    php的环境搭建很简单,从网上下载wamp service 2.5,官方网址http://www.wampserver.com/,有32位和64位的,必须下载跟系统一致的版本,不然会出现奇怪的错误,这 ...

  4. 阮一峰:jQuery官方基础教程笔记

    jQuery是目前使用最广泛的javascript函数库. 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. 对于网页开发者来 ...

  5. python基础教程笔记—画幅好画(详解)

    今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个 ...

  6. swift基础教程笔记

    http://www.imooc.com/learn/127 <玩儿转swift> 慕课网教程笔记,自己根据2.1的语法做了更新. I. 1.通过playground来学习.熟悉swift ...

  7. Cytoscape基础教程笔记

    昨天开始学用Cytoscape,其tutorial分为两个部分,基础的和高级 的.基础教程又分成了四课:Getting Started.Filters & Editor.Fetching Ex ...

  8. Java基础教程笔记

    第一部分——java基础程序设计 一:java语言特色 1:语言有点:“一次编写,到处运行” 2:相对于C++A:提供了对内存的自动管理:B:去除了C++语言中的“指针”:C:避免了赋值语句(如a=3 ...

  9. php基础教程笔记2

    如果学过c.java,php的语法不学即会,但是不同的是php是一种脚本语言,需要解释器才能运行.php又和js不同,js是客户端语言,而php运行在服务器端,它无法获取客户端浏览器信息.但是php又 ...

随机推荐

  1. CSS制作渐变背景色

    <style type="text/css"> #grad1 { background: -webkit-linear-gradient(#C2F2F0,#); /* ...

  2. matlab的Deep Learning的toolbox 中的SAE算法

    最近一直在看Deep Learning,各类博客.论文看得不少 但是说实话,这样做有些疏于实现,一来呢自己的电脑也不是很好,二来呢我目前也没能力自己去写一个toolbox 只是跟着Andrew Ng的 ...

  3. 转--Python re模块 验证11位手机号

      一.常用正则表达式符号和语法:   '.' 匹配所有字符串,除\n以外 ‘-’ 表示范围[0-9] '*' 匹配前面的子表达式零次或多次.要匹配 * 字符,请使用 \*. '+' 匹配前面的子表达 ...

  4. [flutter+dart] windows7下开发环境的安装与配置

    前言 博主是做嵌入式的,参加工作时间也不久,而且是非科班出身,之前从未接触过移动开发.最近了解到了flutter框架和dart语言,想作为第二语言学习一下,因此会从最基础的环节开始,以此博客作为记录, ...

  5. mysql 数据库的设计三范式

    三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非主键字段不能相互依赖; 解释: 1NF:原子性 字段不可再分,否则就不是关系数据库; 2NF:唯一性 一个表只说明一个事物 ...

  6. 施密特正交化 GramSchmidt

    施密特正交化 GramSchmidt 施密特正交化的原名是 Gram–Schmidt process,是由Gram和schmidt两个人一起发明的,但是后来因为施密特名气更大,所以该方法被简记为施密特 ...

  7. centos卸载mysql

    1.查看系统安装mysql rpm -qa|grep -i mysql 2.卸载 rpm -ev --nodeps mysql-community-release-el7-5.noarch 3.查询剩 ...

  8. Codeforces Round #503 (by SIS, Div. 2)

    连接:http://codeforces.com/contest/1020 C.Elections 题型:你们说水题就水题吧...我没有做出来...get到了新的思路,不虚.好像还有用三分做的? KN ...

  9. BZOJ-2298|区间dp|线段树

    problem a Description 一次考试共有n个人参加,第i个人说:"有ai个人分数比我高,bi个人分数比我低."问最少有几个人没有说真话(可能有相同的分数) Inpu ...

  10. C# DataGridView 动态添加列和调整列顺序

    https://yq.aliyun.com/articles/421700 // DataGridView1的ColumnDisplayIndexChanged事件处理方法private void D ...