Objective-C基础教程三

时间:2022-09-07 08:26:32

1,Objective-C类的源代码被分成了两部分,接口interface和实现implementation。前者.h文件中一般有@interface指令,公共struct定义,enum常量,#defines和extern全局变量等。后者.m文件是所有实现细节(如类的implementation指令,全局变量的定义,私有struct等)。


2,导入头文件有两种不同的方法:使用引号或者使用尖括号。

如,#import<Cocoa/Choca.h>。带尖括号的语句是用来导入系统头文件的,这些头文件是只读的,因为它属于系统。

#import "Tire.h"。带引号的语句说明导入的是项目本地的头文件,这个可以被编辑。


3,依赖关系

依赖关系是两个实体之间的一种关系。依赖关系可以存在于两个类之间,比如有继承关系的父类和子类。依赖关系也可以存在于两个或多个文件之间。CarParts.m依赖于Tire.h和Engine.h。如果两个头文件有任何一个发生了变换,都需要重新编译CarParts.m来继承这个变化。

导入头文件在头文件(.h)和进行导入的源文件(.m或者.h)之间建立了一种很强的依赖关系。如果这个头文件有任何变化,则所有依赖于他的文件都需要被重新编译。

依赖关系是可传递的,即头文件也可以相互依赖,所以重新编译的问题甚至可能会变得越发严重


好在Objective-C提供了一种方法能够减少由依赖关系引起的重新编译所带来的影响。依赖关系问题的存在是因为Objective-C编译器需要某些信息才能够工作。有时,编译器需要知道类的全部信息,例如它的实例变量配置、它所继承的所有类等。而有的时候,编译器只需要知道类名即可,不需要了解它的整个定义。

Objective-C引入了关键字@class来告诉编译器:“这是一个类,所以我只需要通过指针来引用它。”这样编译器就会“平静”下来,它并不需要知道关于这个类的更多信息,只要了解它是通过指针来引用的即可。

@class创建了一个前向引用。就是在告诉编译器:“相信我,以后你会知道这个类到底是什么,但是现在,你只需要知道这些”。如果有循环依赖关系,@class也很有用。即A类使用B类,B类也使用A类。如果试图通过#import语句让这个类互相引用,那么最后就会出现编译错误。但是如果在A类中使用@class B,在B类中使用@class 工,那么这两个类就可以互相引用了。

#import <Cocoa/cocoa.h>

@class Engine

@interface Car : NSObject
{
Engine *engine;
}
- (Engine *) engine;//get方法
- (void) setEngine: (Engine *) newEngine;//set方法

@end//Car


4,在继承关系中就不能用@class关键字了,因为编译器需要知道所有关于超类的信息才能成功为其子类编译@interface。它需要了解超类的实例变量的配置(数据类型、大小和排序)。

#import "Engine.h"

@interface Slant6 : Engine
@end//Slant6


5,Xcode介绍

首行缩进,代码自动提示填充,代码格式format,批量替换前创建快照snapshot,open quickly, 添加书签

一些有用的快捷键:

Command + Shift + E :扩展编辑器
Command + [ :左移代码块
Command + ] :右移代码块
Tab :接受代码提示
Esc :显示代码提示菜单
Ctrl + . (句点):循环浏览代码提示
Shift + Ctrl + . (句点):反向循环浏览代码提示
Ctrl + / :移动到代码提示中的下一个占位符
Command + Ctrl + S :创建快照
Ctrl + F :前移光标
Ctrl + B :后移光标
Ctrl + P :移动光标到上一行
Ctrl + N:移动光标到下一行
Ctrl + A : 移动光标到本行行首
Ctrl + E : 移动光标到本行行尾
Ctrl + T :交换光标左右两边的字符
Ctrl + D:删除光标右边的字符
Ctrl + K :删除本行
Ctrl + L : 将插入点置于窗口正中
Command + Alt + D:显示open quickly 窗口
Command + Alt + 上方向键 :打开配套文件
Command + D :添加书签
Option + 双击:在文档中搜索
Command + Y :以调试方式运行程序
Command + Alt + P : 继续(在调试中)
Command + Alt + 0 :跳过
Command + Alt + I :跳入
Command + Alt + T :跳出


6,项目导航栏介绍

1,HelloWorld。 这个是以项目名来命名的文件夹。包含.h .m  .xib文件。先说说ViewController.xib文件,该文件包含特定于项目主视图控制器的用户界面元素。

2,Supporting Files,该文件夹搞好了项目中所需的非Objective-C类的源代码文件盒资源文件。创建一个新的ios程序时,包含以下四个文件

HelloWorld-Info.plist: 这是个包含应用程序相关信息的属性列表。

InfoPlist.strings:这是个文本文件,其中包含可能被属性列表引用的可读字符串。不同于属性列表,该文件可以本地化。多语言国际化吧。

main.m:应用程序的main()方法,入口。通常不需要修改它。

HelloWorld-Prefix.pch: 包含项目中用到的来自外部框架的一些头文件(扩展名为.pch表示预编译)。


3,Frameworks,这是一种特殊的库,其中可以包含代码,也可以包含图像和声音文件等资源。任何添加到这个文件夹中的框架或者库都会被链接应用程序中,而你的代码能够适应包含在改框架或者库中的对象,函数和资源。项目中已经默认链接了最常用的框架和库,所以大多数情况下,不需要添加任何内容。

4,Products,这个文件夹包含项目构建时所生成的应用程序。



7,nib文件

Interface Builder支持两种文件格式,使用.nib扩展名的旧格式和使用.xib扩展名的新格式。现在统称为nib文件。

nib文件的构成,

File's Owner(文件拥有者),代表从磁盘上加载nib文件的对象。换言之,File's Owner是“拥有”该nib文件副本的对象。

First Responder(第一响应者),基本上说就是用户当前正在与之交互的对象。第一响应者会随着用户与界面的交互而变化。


8,库

Utility视图的下半部分成为库窗格(library pane)。很有用的,包含

文件模板库(file template library),包含一些文件模板,如果需要在项目中添加一个新文件,可以使用它们。

代码片段库(code snippet library),包含一些代码片段,可以在源码中使用它们。

对象库(object library),包含各种可重用的对象,比如文本字段,标签,滑动条,按钮等。

媒体库(media library),所有的媒体文件,声音,图片,和影片等