类的定义
但你在编写IOS程序是大部分时间都花费在了与对象相关的地方。OC中的对象就像其他面向对象语言中的对象一样,用一定的规则来封装相关数据。
进行OS X或是IOS开发时,apple已经为我们设计了大量的类来解决一些常见的问题例如字符串,数字,按钮,列表等类。在面向对象的编程宗旨中,对象就是类的实例化,在本章中将会讲解如何在Objective-C中通过interface来声明一个类。interface一般用来描述你想要的那个类以及它实现的方式。interface包含了一系列这个类可以接收的消息,因此我们还需要提供该类的实现,用来响应每一个发过来的消息。
类是对象的蓝图
许多对象有着相同的属性以及方法,那么我们就可以抽象出这些属性和方法组成类。使用类的一个好处就是我们不用考虑底层实现的细节,比如NSString类我们想要拼接两个字串是只需发送特定的消息就能拿到我们想要的结果,而不用去考虑NSString是如何存储一个个的字符以及他们是如何被拼接起来的。显然类的存在极大的减轻了开发人员的工作压力。在Objective—C中class interface准确的描述了一个给定的对象应该如何被其他对象来调用,换句话说它定义了类的实例与外部世界的公共接口。
类名中Mutable的含义
在Objective-C中经常出现类似的两种类名如NSArray,NSMutableArray。他们之间有何区别呢?好接下来我们细细分析。
一些类定义的对象是不可改变的,这意味着对象内部的值必须在初始化是就被赋好了值,而且该值是不能够在被改变了,在OC中NSString、NSArray、NSNumbuter都是不能够被改变的。所以当你改变一个数字是你就需要创建一个新的NSNumber实例。
有不可改变的就有可改变的,值可改变的类名中通常有一个Mutable,这种类型的类允许你去修改值。
基本语法
通常使用下列语法声明一个类:
@interface SimpleClass : NSObject @end
通过property来控制变量的访问:
@interface SimpleClass : NSObject @property NSString *firstName; @property NSString *lastName; @end
property作用简述,当我们用property定义一个变量时
@interface SimpleClass : NSObject @property NSString *firstName; @end
相当于
@interface SimpleClass : NSObject{ NSString *firstName; } - (void)setFirstName:(NSString *)sender; - (NSString *)firstName; @end
由上面不难看出property帮助我们创建了set和get方法来访问变量,实际上property还在set,get方法中做了一些内存管理上的处理,关于这部分内容我会在以后的博客中讨论。
方法的声明:
@interface SimpleClass : NSObject @property NSString *firstName; - (void)someMethodWithValue:(someType)value;//OC形式 void someFunction(someType value);//C形式 @end
实现一个类的interface
#import "XYZPerson group task management.h" @implementation XYZPerson NSLog(@"hello world"); @end
实现一个方法
#import "XYZPerson.h" @implementation XYZPerson - (void)sayHello{ NSLog(@"hello world"); } @end
OC中类也可以是一个对象
这种类型的类中不能够有属性值,方法必须是类方法
interface FactoryMethod:NSObject + (id)string; + (id)stringWithString:(NSString *)aString; + (id)stringWithFormat:(NSString *)format, …; + (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error; + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc; end
+代表该方法是一个类方法
-代表一个方法是成员方法