A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jing397 中级黑马   /  2015-10-10 21:27  /  1358 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

和其他大部分面向对象编程语言一样,Objective-C 中的类也支持封装数据,以及定义可以在该数据上执行的动作。对象是运行时类的一个实例。在类里声明了的实例变量和方法,它的每个实例都在内存中拥有同样的实例变量,以及指向那些方法的指针。创建一个对象时,你需要经过两个步骤:内存分配(allocation)和初始化(initialization)。

Objective-C 中的类有自己的规范要求,必须包括两个不同的部分:接口(interface)和实现(implementation)。接口部分含有类的声明、实例变量和相关方法的声明。既然是作为 C 语言,通过分别定义头文件和源文件,你就可以将公有声明和具体的实现代码给分离开来。(你可以在实现文件里放一些声明代码,因为有些情况下,它们共同构成一个公用程序里的接口部分。)下表列出了这些文件的后缀以及区别:

后缀、源文件类型:
  • .h – 头文件。头文件含有类、类型、函数和常量的声明。
  • .m – 源文件。这个后缀的源文件可以同时包含 Objective-C 和 C 语言的代码。
  • .mm – 源文件。这个后缀的源文件可以同时包含 C++、Objective-C 以及 C 语言的代码。只有在你的 Objective-C 代码中用到了 C++ 的类或者特性时才需要使用这个后缀。

如果需要在源代码中包含头文件,你需要使用 #import 命令,和 C 语言中的 #include 命令类似。两者的区别在于,#import 能够保证头文件只被包含一次。

图 1 中是一段的类声明的语法展示,声明了一个叫做 MyClass 的类,它继承于基本类(或根类):NSObject。(根类可以被所有的其他类直接或间接继承。)类声明开头是一条编译器指令 @interface,结尾是一条 @end 指令。在类名称后边(中间用冒号分隔),是父类的名称。在 Objective-C 中,每个类只能有一个父类。类中包含的实例变量(有时被称为 ivar,在其他编程语言中有时被称为成员变量)的声明被一个花括号({ 和 })包裹起来。实例变量是可选的。在实例变量语句块下边是属性(图中没有写出来)和类的方法声明。每个实例变量和方法声明的语句结尾都要有一个分号。

图 1 一段类声明

类的实现的语法也是类似的。开头是编译器指令 @implementation(后面有类的名称),结尾是 @end 指令。方法的实现代码就在这两个指令的中间。实现代码中必须导入它的接口文件,写在代码的第一行。

#import “MyClass.h”
@implementation MyClass
- (id)initWithString:(NSString *)aName
{
    // 在这里书写代码
}
+ (MyClass *)myClassWithString:(NSString *)aName
{
    // 在这里书写代码
}
@end

我们之前讲过,Objective-C 支持包含对象的动态类型变量,它同时也支持静态类性。静态类型变量的声明前边要有所述类的名称。而动态类型变量声明以 id 来代表对象。在某些情形下,你会用到动态类型变量。比如,一个数组这样的对象集合(里面包含的对象类型可能是无法预知的)就会用到动态类型变量。这样的变量能够提供无比灵活的功能,使得 Objective-C 程序能够拥有更大的动态性。

下面的例子展示了静态类型和动态类型变量的声明方式:

MyClass *myObject1;  // 静态类性
id             myObject2;  // 动态类型
NSString *userName;  // 曾出现在“你的第一个 iOS 应用”中(静态类型)

请注意第一个声明里的 * 星号。在 Objective-C 语言中,对象永远是通过指针来引用的。如果现在你还不能明白这句话的意思也不必担心,在学会Objective-C 基础之后再研究指针也不迟。现在你需要记住的,是在静态类型变量声明时,变量名称前面一定要有 * 星号。而 id 类型则暗示它是一个指针。


6 个回复

倒序浏览
学习一下!!!
回复 使用道具 举报
学习一下
回复 使用道具 举报
顶顶顶顶顶顶顶顶,66666
回复 使用道具 举报
支持支持!!
回复 使用道具 举报
还会基础的看着有点吃力  
回复 使用道具 举报
jing397 中级黑马 2015-10-12 12:38:44
7#
顶一下!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马