Objective-C的入门(一)

1.Objective-C的类规格说明包括两部分:接口和实现。
接口部分包含了类声明和实例变量的定义,以及类相关的方法。
@interface MyClass:NSObject //接口部分声明一个叫MyClass的类,继承NSObject
{
int count;
id data;
NSString* name;
}
-(id)initWithString:(NSString*)aName;
+(MyClass*)createMyClassWithString:(NSString*)aName;
@end
类声明都是以@interface开始,由@end结束。大括号里面是变量声明,实例变量块后面就是类声明的方法列表。
类实现由两个编译选项确定,@implementation和@end。这些选项给编译器提供了要将方法和对应类联系起来,所需的范围信息。因此方法的定义和接口中对应的声明是匹配的,只是多了代码块而已。
@implementation MyClass
-(id)initWithString:(NSString*)aName
{
if(self==[super init]){
count count=0;
data = nil;
name =[aName copy];
return self;
}
}
+(MyClass*)createMyClassWithString:(NSString*)aName
{
return[[[self alloc]initWithString:aName] autorelease];
}

2.变量
变量保存对象始终使用指针类型。Objective-C对变量包含的对象支持强弱两种类型。强类型指针的变量类型声明包含了类名,弱类型指针使用id作为对象的类型。弱类型指针常用于类的集合,在集合中对象精确的类型可以是未知的。
MyClass* myObject1;//强类型
id myObject2;//弱类型

3.方法
Objective-C中的类可以声明两种类型的方法:实例方法和类方法。
方法声明包括方法类型标识符,返回值类型,一个或多个方法标识关键字,参数类型和名信息。
声明由一个减号(-)开始表明这是一个实例方法
-(void)insertObject:(id)anObject atIndex:(NSUInteger)index
-:表示为实例方法
void:返回类型
insertObject:标识关键字
id:参数类型
anObject:参数名

4.若要调用一个方法,需要传递消息到对应的对象,这里的消息就是方法标识符,以及传递给方法参数信息。发送给对象的所有消息会动态分发。如果子类定义了跟父类的具有相同标识符的方法,那么子类首先会收到消息,然后可以有选择的把消息转发给他的父类。消息被中括号包括
[myArray insertObject:anObj atIndex:0];
这里表示给myArray变量传递消息insertObject:atIndex:
Objective-C允许使用嵌套信息,每个嵌套信息的返回值可以作为其他消息的参数或者目标。如果你有另外一个对象叫做myAppObject拥有方法可以访问数组以及插入对象到一个数组,你可以把前面的例子写成如下的样子:
[[myAppObject getArray]insertObject:[myAppObject getObjectToTnsert] atIndex:0];

5.传递消息给类本身
当给类发消息的时候,指定的方法必须被定义为类方法,而不是实例方法。类方法的典型用途是用作创建新的类实例的工厂方法,或者是访问类相关的共享信息路径。类方法声明的语法跟实例方法几乎完全一样,只是有点小差别。与实例方法使用-作为方法标识类型标识符不同,类方法使用+
NSMutableArray* myArray = nil;//nil本质上等于NULL
myArray = [NSMutableArray arrayWithCapacity:];//arrayWithCapacity是NSMutableArray类的类方法,为类的新实例分配内容并初始化,然后返回。

6.属性
属性是用来代替声明存取方法的便捷方式。属性不会在你的声明中创建一个新的实例变量。他们仅仅是定义方法访问已有的实例变量的快速方式而已。
@property和@synthesize可以自动生成某个类成员变量的存取方法
@property(参数)类型 名字
参数可以分为三大类:
读写属性:readwrite和readonly
readwrite:这个属性值是默认的
readonly:只生成getter不会有setter
原子性:nonatomic和atomic
atomic:是为了保证程序能够并发,避免同步问题。
内存管理:assign/retain/copy
assign:处理基础类型,比如int,float,如果你声明的类型就是基础类型,该属性可以不加。
(对assign而言,set函数和get函数如下所示:
@property(nonatomic,assign)int val;
-(int)val
{
return val;
}
(void)setval:(int)newVal
{
val=newVal;
}

retain:自动retain对象,实现
copy:自动生成该对象的克隆

你可能感兴趣的:(objective)