一、对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. spring里的事物设置

    有的人说事物在spring里设置有两种,其实事物设置在spring配置文件中共有五种方式:第一种方式:每个Bean都有一个代理第二种方式:所有Bean共享一个代理基类第三种方式:使用拦截器第四种方式: ...

  2. 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups)VALUES('1','hh','hh@163.com','Boss')' at line 1

    mysql8.0版本 在已存在的表里插入一条数据 insert INTO api_user(id,username,email,groups)VALUES('1','hh','hh@163.com', ...

  3. Java并发包1--线程的状态及常用方法

    一.线程主要有以下几种状态: new(新建):线程刚刚被创建 runnable(就绪):新建的线程执行start方法进入就绪状态等待系统调度分配CPU,被分配了之后就进入运行中状态 blocked(阻 ...

  4. java中的函数

    1.函数:定义在类中的具有特定功能的一段独立小程序.函数也称之为方法. 为了提高代码的复用性,对代码进行抽取. 将这个部分定义成一个独立的功能.方便使用. java中对功能的定义通过函数来实现的.2函 ...

  5. CentOS 7Google浏览器

    CentOS 7安装并启动Google浏览器(★firecat亲测有效★) 2018年09月23日 12:42:47 libaineu2004 阅读数:3088    版权声明:本文为博主原创文章,未 ...

  6. 编译原理 #02# 简易递归下降分析程序(js实现)

    // 实验存档 截图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

  7. Linux 管理环境变量的文件分为系统级和用户级别

    Linux 管理环境变量的文件分为系统级和用户级别 管理环境变量的文件也分为系统级和用户级别: 1.系统级:/etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于 ...

  8. Django路由控制

    本文目录 一 Django中路由的作用 二 简单的路由配置 三 有名分组 四 路由分发 五 反向解析 六 名称空间 七 django2.0版的path 回到目录 一 Django中路由的作用 URL配 ...

  9. Client not ready yet.....

    提示Client not ready yet.....程序安装上就提示停止了 Logcat无提示 只有run里边提示  Client not ready yet....... 我尝试了  Clean ...

  10. Appium+python 使用 press_keycode 如何输入大写字母

    背景:在做自动化测试项目时,需要在文本框中输入一串数字和字母组合的字符串(注:此页面为webview无法使用send_keys方法) 要使用send_keys方法首先要知道键盘字符对应的数值,这个可以 ...