`

OC学习--类、初始化、内存管理

 
阅读更多

C语言的基本基本没有 ,就开始学习OC难免回有些浅薄,写给0基础的人看,主要是给我自己一回忆的地方,希望大虾们不要见笑。

对象的声明格式:

NSObject* anObject; (类名*对象名)--OC语言中NS(NeXTSTEP )为现任苹果CEO,之前NeXTSTEP老板的乔布斯团队的用户界面工具包,并一直沿用至今。由于OC中所有对象的操作都是由指针来完成,所以我们可以见到代码中大部分都是指针。

对对象的操作称为方法,以[receiver message];(消息)的形式来完成。所以消息就是方法名的抽象。方法可以带多个参数,出于清晰方面考虑,多参数的一般将参数名分为不同不分,如:[receiver message:argument1 name:argument2];

如果有返回值的,需要指定返回值的类型 :type Returns;

Returns=[Class message];

OC中所有的类都是继承来的,而他们的根类就是NSObject,这是一个抽象类(Abstract classes),他本身不能被实例化,单独使用也没有任何意义,完全是为了被继承。所有的子类有其父类的所有属性和方法。

类的定义分为两个部分,接口部分(interface)和实现部分(implementation),接口部分声明了类中的属性和方法名,实现部分声明了属性,和方法的的定义。由于接口部分有属性的声明,所以在实现部分,我们一般省略对属性的声明。类的声明格式如下:

@interface ClassName:ItsSuperclass{ @implementation ClassName:ItsSuperclass{

instance variable declarations; instance variable declarations; //下划线部分可以省略

} }

method declarations; method definitions;

@end @end

方法的定义格式:一般以大括号为定义体部分,要声明方法的返回值类型,如果不写则默认为id类型。方法前以“+”“-”号为开始,“+”代表该方法为类方法,对类对象进行操作。“-”为实例方法,对实例变量进行操作。

O-C中有两个关键字可以在方法的实现中代表执行方法的对象:

self:执行方法的对象本身

super:调用对象的父类中的实现来执行方法

self除了可以用作向自身请求方法以外,还可以作为一个代表对象本身的隐藏变量来使用

super只能出现在消息表达式中,代表了对被复写的方法的原始实现的请求方式

O-C中对象的创建需要两个部分,第一:内存分类(Allocation)。第二:对对象进行初始化(initialization)。而我们一般将这两步在同一个语句中实现。
id anObject=[[Rectangle alloc]init];

如果初始化方法有可能返回nil,则还需要做检查处理:

id anObject = [[SomeClass alloc] init];

if ( anObject )

[anObject someOtherMessage];

else

...

分配内存并初始化以后,他在内存中的所有位置都被置0。如果这样的结果不是我们想要的,我们需要对对象赋一定的值才能继续进行时。我们就需要自定义初始化。自定义初始化方法时所有方法中要求最多的。

1。自定义初始化方法的命名一般应以“init”开头

2。初始化方法的返回值类型必须是id

3。在自定义初始化方法的实现中,必须有对本类的定初始化方法的引用

4。在实现中引用其它初始化方法时,注意把返回值赋给self

5。在对实例变量赋值时,进行直接访问,而不是透过访问器

6。在实现的最后返回self,如果初始化过程失败,则返回nil

通常应当在完成对先期初始化结果的检查后才进行外部连接的建立:

- (id)init {

if (self = [super init]) {

creationDate = [[NSDate alloc] init];

}

return self;

}

初始化的过程为从上到下,先父类后子类。例如C继承于B,B继承于A,则初始化的顺序为先a,再b,再c

A

@implementation superclass

-init{

if(self=[super init])

{

return self;

}else{

self release;

return nil;

}

B

-init

{ return [ self initWithname];} //返回本类的init方法

-(id) initWithname:(NSSrrung *)string

if(self=[super init]) // 判断父类中的init方法执行情况

{ name=string;

return self;}

C

-(id)initWithname:

{ return [self initWithname:fromFile]; }

-(id)initWithname:(NSString)...fromFile

if (self=[super initWithname])

{...

return self;}

TheDesignatedInitializer

指定初始化方法(Designated Initializer)。指定初始化方法即指被指定进行从父类继承的实例变量的初始化的初始化方法。上例B中的initWithName方法就是指定初始化。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics