热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ObjectiveC基础教程三

1,Objective-C类的源代码被分成了两部分,接口interface和实现implementation。前者.h文件中一般有interface指令

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


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

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

#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 @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),所有的媒体文件,声音,图片,和影片等




推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • iOS 类簇及越界处理
     估计做iOS开发的朋友都遇到多一个问题,就是数组越界,-[__NSArray0objectAtIndex:]:index1beyondboundsforemptyNSArray’ ... [详细]
  • IvebeentryingforadayortwototryandgetashadowtodrawinsidethetextofanNSTextField ... [详细]
  • jsappsugar,基于,js,语法,定义 ... [详细]
  • ObjectiveC与Swift之间的互相调用和跳转
    Objective-C与Swift之间的互相调用和跳转-一、OC和Swift互相跳转首先在需要引入Swift的文件中导入头文件#import工程名-Swift.hOC跳转Swift ... [详细]
  • 我的iOS开发入门自学路径
    我有一个清单,列着希望在大学里完成的事。比如,学一门乐器,和朋友去旅游,搭建自己的博客,去滑翔,看各主题的书籍。其中一项是,写自己的App并且上架。去年开始,我准备完成这一项,所以 ... [详细]
  • c语言的编译器是什么,c语言编译器是什么
    本文目录一览:1、常见的C语言编译器是什么?2 ... [详细]
author-avatar
简单式赞美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有