`
bsr1983
  • 浏览: 1102659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

objective-c学习笔记一

 
阅读更多

1章 启程

1.1预备知识

1.2 历史背景

       CocoaObjective-C是苹果公司Mac OS X操作系统的核心。

1.3 内容简介
1.4小结

2 C的扩展

Objective-C只不过是拥有一些附加特性的C语言,但它很好用。

2.1 最简单的Objective-C程序

2.2 解构Hello Objective-C程序

       Xcode.m扩展名表示文件含有Objective-C代码,应由Objective-C编译器处理。C编译器处理名称以.c结尾的文件,而C++编译器处理.cpp文件。在Xcode中,所有这些编译工作全由GCCGNU Compiler CollectionGNU编译器集合)

处理,这个编译器能够理解C语言的全部3个变体。

       说明 Objective-C刚诞生的时候,扩展名.m代表message,指的是Objective-C的一个主要特性。

2.2.1 #import

       #importGCC编译器提供的,Xcode在编译Objective-CCC++程序时都会使用它。#import可保证头文件只被包含一次,而不论此命令实际上在那个文件中出现了多少次。

 

       框架是一种聚集在一个单元的部件集合,包含头文件、图像、声音文件等。苹果公司将CocoaCarbonQuickTimeOpenGL等技术作为框架集成提供。Cocoa的组成部分有FoundationApplication Kit(也称AppKit)框架。还有一个支持框架的套件,包含Core AnimationCore Image,这位Cocoa增添了很多种精彩功能。

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

       每个框架都是一个重要的技术集合,通常包含数十个甚至上百个头文件。每个框架都有一个主头文件,它包含了所有框架的各个头文件。通过使用#import导入主头文件,可以使用所有框架的特性。

       Foundation框架的头文件占用了近1MB的磁盘存储空间,包含一万四千多行代码,涵盖一百多个文件。使用#import<Foundation/Foundation.h>包含主头文件,就能够获得整个集合。

2.2.2 NSLog()@”字符串

       printf()一样,NSLog()接受一个字符串作为其第一个参数,该字符串可包含格式说明符(如%d)。除此之外,NSLog()添加了新特性,如时间戳、日期戳和自动附加换行等。

       NS”前缀的来历要追溯至此工具还被称为NextSTEP,而且是NeXT Software公司产品的时候。

       @符号是Objective-C在标准C语言基础上添加的特性之一。双引号中的字符串前有一个@符号,这表示引用的字符串应该作为CocoaNSString元素来处理。

2.3 布尔类型

       C语言拥有布尔数据类型bool,它具有true值和false值。Objective-C提供了相似的类型BOOL,它具有YESNO值。

       这两种不同的布尔类型可以在同一个程序中共存,但在编写Cocoa代码时要使用BOOL

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

       Objective-C并不将BOOL作为仅能保存YESNO值的真正的布尔类型来处理。编译器将BOOL认做8位二进制数,YESNO只是一种约定。

2.3.1 BOOL强大的实用功能

2.3.2 比较

       NSLog()的编写者添加%@说明符,是为了通知NSLog()接受适当的参数,将其作为NSString,再使用该字符串中的字符,并将其发送到控制台。

       说明:我们还没有正式介绍过对象,但现在可以简单地透露一下:使用NSLog()输出任意对象的值时,都会使用%@格式数码。在使用这个说明符时,对象通过一个名为description的方法提供自己的NSLog()格式。NSStringdescription方法可简单输出字符串中的字符。

2.4 小结

3 面向对象编程基础知识

3.1 间接

       在编程行业有句老话,大意是“只要多添加一个间接层,计算机科学中就没有解决补了的问题”。间接这个词的含义很简单——不在代码中直接使用某个值,而是使用指向该值的指针。

3.1.1 变量与间接

       基本变量就是间接的一种实际应用。

3.1.2 使用文件名的间接

       Xcode4.2中设置运行参数:Product->Edit Scheme->Arguments->点击“+”增加启动参数。

3.2 在面向对象的编程中使用间接

       OOP真正的革命性就是它在调用代码中使用间接。比如在调用函数时,不是直接调用,而是间接调用。

 

3.2.1 过程式编程

       在过程式程序中,数据通常保存在简单的结构(例如Cstruct元素)中。还有一些较为复杂的数据结构,例如链表和链树。当你调用一个函数时,你将数据传输给函数,而函数处理该数据。函数是过程式编程的中心:你决定使用什么函数,然后调用那些函数,传递其需要的数据。

3.2.2 实现面向对象编程

       过程式程序建立在函数之上,数据为函数服务。面向对象编程从相反的角度来看待问题,它以程序的数据为中心,函数为数据服务。在OOP中,不再重点关注程序中的函数,而是专注于数据。

       OOP中,数据通过间接方式包含对自身操作的引用代码。

       那么,对象到底是什么呢?它其实是一种神奇的C struct。通常,该结构能通过函数指针查找与之相关的代码。

id代表identifier(标识符)id是一种泛型,用于表示任何种类的对象。id实际上是一个指针,指向其中的某个结构。

Objective-C中,方括号还有其他意义:它们用于通知某个对象应该做什么。在方括号内,第一项是对象,其余部分是你需要对象执行的操作。

Objective-C中,通知对象执行某种操作称为发送消息(有些人也将其称为“调用方法”)。

3.3 学习有关的术语

       1是一种结构,它表示对象的类型。对象引用类来获取和本身有关的各种信息,特别是运行什么代码来处理每种操作。Objective-C编程风格建议开发人员使用首字母大写的类名。

       2对象是一种结构,它包含值和指向其累的隐藏指针。运行中的程序通常都包含成千上百个对象。

       3实例是对象的另一种称呼。

       4消息是对象可以执行的操作,用于通知对象去做什么。

       5方法是为响应消息而运行的代码。

       6方法调度程序Objective-C使用的一种基址,用于推测执行什么方法以响应某个特定的消息。

       7接口是对象的类应提供的特性的描述。

       8实现是使接口正常工作的代码。

3.4 Objective-C中的OOP

3.4.1 @interface部分

       创建某个特定类的对象之前,Objective-C编译器需要一些有关该类的信息。特别地,它必须知道对象的数据成员(即对象的C struct该是什么样子)和它提供的特性。可以使用@interface指令把这种信息传递给编译器。

       -(void) draw;

       前面的短线表明这是Objective-C方法的声明。这是一种区分函数原型与方法声明的方式,函数原型中没有先行短线。短线后面是方法的返回类型,位于圆括号中。Objective-Cvoid表示无返回值。

       Objective-C方法可以返回与C函数相同的类型:标准类型(整型、浮点型和字符型)、指针、对象引用和结构。

       熟悉中缀符

       Objective-C有一种称为中缀符(infix notation)的语法技术。方法的名称机器参数都是合在一起的。例如,你可以这样调用带一个参数的方法:

       [circle setFillCorlor:kRedColor];

       带两个参数的方法调用如下所示:

       [textThing:setStringValue:@”hello there”

corlor:kBlueColor];

       setStringValue:corlor:实际上是参数的名称(实际上是方法名称的一部分,后面再详细介绍),@”hello there”kBlueColor是被传递的参数。

       如果方法使用参数,则需要冒号;否则不需要冒号。

3.4.2 @implementation部分

       通常接口被称为API,“application programming interface”中3个首字母的缩写。使对象真正起作用的代码位于@implementation中。

       @implementation是一个编译器指令,表明你将为某个类提供代码。类名出现在@implementation之后。该行的结尾处没有分号,因为在Objective-C编译器指令后不必使用分号。

       可以在@implementation中定义那些在@interface中无相应声明的方法。可以把它们看做是私有方法,仅在类的实现中使用。

       说明:你也许认为,既然单独在@implementation指令中定义方法,就不能从该实现之外访问该方法。但事实并非如此,Objective-C中不存在真正的私有方法。也无法把某个方法标识为私有方法,从而禁止其他代码调用它。这是Objective-C动态本质的副作用。<!--EndFragment-->

分享到:
评论

相关推荐

    Objective-c学习笔记

    Objective-c学习笔记 Objective-c学习笔记

    Objective-C 学习笔记

    Objective-C 学习笔记 IOS软件开发

    Objective-C学习笔记(一)OC基础.md

    1. Objective-C概述,介绍了Objective-C的来源、发展历史和作为面向对象的C语言的特点。 2. 第一个OC程序,讲解了如何创建一个OC项目,解释了一些OC程序中的关键字和语法。 3. OC基础语法,对比了OC和C语言的一些区别...

    Effective Objective-C 2.0 学习笔记目录

    Effective Objective-C是本学习Objective-C的好书,没有见pdf版,亚马逊上的这儿本书的价格不菲。让我们来看看书里的内容和完整的学习笔记吧。

    Objective-c学习资料集合

    非常全面的Objective-c的学习教程,里面包含了很多程序员的学习笔记有图文解说,还有语法解说,还有使用函数以及如何创建,不管你是新手还是高手都是你Objective-c开发的好工具好帮手,里面还包含了学习网站的教学...

    objective-c学习笔记

    学习心得,对oc的简要讲解,图形解析,清晰明了。

    Objective-C学习资料(内置学习笔记,各内容源码)

    Objective-C学习资料(内置学习笔记,各内容源码) 是我近学习2个月并整理的东西,对于初学者有一定的帮助

    objective c学习笔记和示例

    苹果的iPhone和iPad应用开发都指定使用同一开发语言:Objective-C语言。这是一种简单的面向对象编程语言,它的基础是C程序设计语言。Objective-C不仅功能强大,而且简单易学。Objective-C已经成为苹果系统下应用程序...

    objective c学习笔记

    Objective-C是一种简单的...Objective-C通过提供类定义,方法以及属性的语法,还有其他可以提高类的动态扩展能力的结构等,扩展了标准的ANSI C语言。类的语法和设计主要是基于Smalltalk,最早的面向对象编程语言之一。

    objective-c编程入门学习笔记

    涵盖了objetive-c语言的所有基本知识,变量、函数、打印、屏幕输入,教程内附完整笔记源码

    Objective C 学习笔记.pdf

    Objective C 学习笔记

    Objective-C

    Objective-C个人学习笔记

    Swift-Study:Swift学习:从Objective-C到Swift

    #Swift学习: 从Objective-C到Swift 这篇文章是自己学习Swift的笔记与深化。希望这篇文章能够帮助已经有Objective-C经验的开发者更快地学习Swift。同时也品味到Swift的精妙之处。 结论放在开头: 我认为Swift比...

    iphone OBJ-C入门笔记

    个人学习objective-c和xcode helloworld 笔记,比较了objective-c 和C++ JAVA的一些区别

    简单的 Objective-C 示例代码,实现了一个简单的计算器程序

    简单的 Objective-C 示例代码,实现了一个简单的计算器程序 该资源仅供学习

    Objective-C的入门学习笔记

    对于一门语言得学习,个人觉得最主要得就是其语法格式和那些关键字。 因为对于基本现在大多数得语言,每种语言都是一种符合人思维得方式来与计算机交流。 因此,其实每种语言中定义或是封装好得基础类和类库,其实都...

    JSPatch学习笔记-UI基础

    代码中是JSPatch学习笔记的UI基础部分,其中包括以下内容: 1. 项目环境配置 2. 变量 * 局部变量 * 全局变量 * 使用OC中的枚举类型 `Objective-C 里的常量不能直接在 JS 上使用,可以直接在 JS 上用具体值代替,...

    从C++到Objective C的学习之路

    从C++到Objective C的比较学习之路,C++ Objective C 笔记

    DollarP_ObjC:$ P手势识别器的Objective-C端口,可在iOS应用程序中使用

    用于Objective-C的$ P点云识别器$ P手势识别器的Objective-C端口,将在iOS应用程序中使用。什么是$ P? 从: $ P点云识别器是一种二维手势识别器,用于基于手势的用户界面的快速原型制作。 用机器学习的术语来说,$ ...

Global site tag (gtag.js) - Google Analytics