1. 程式人生 > >initialize方法和init區別詳解

initialize方法和init區別詳解

原創帖子,轉載請註明出處:http://blog.csdn.net/sbvfhp/article/details/47857851

1、定義Father類

//
//  Father.m
//
//  Created by 李建 on 15/8/22.
//  Copyright (c) 2015年 李建. All rights reserved.
//

#import "Father.h"

@implementation Father

+(void)initialize
{
    NSLog(@"Father中的 initialize 方法執行");
}

-(Father *)init
{
    NSLog(@"Father中的 init 方法執行");
    return [super init];
}

@end

例項化後執行效果如下圖:



上圖可以看出,Father例項化三次,initialize方法執行一次,init方法會被執行三次

2、我們定義Son類,繼承Father類

//
//  Son.h
//
//  Created by 李建 on 15/8/22.
//  Copyright (c) 2015年 李建. All rights reserved.
//

#import "Father.h"

@interface Son : Father

@end

例項化後執行效果如下:



從以上圖中可以看出,

1>Father類例項化3次,initialize執行一次,init執行3次

2>Son繼承自Father,當Son例項化一次的時候,其它父類中的initialize執行一次,init方法執行一次

3、我們針對Father類中的列印資訊做一個調整


接下來我們再看看執行效果


initialize不是init

在程式執行過程中,它會在你程式中每個類呼叫一次initialize。這個呼叫的時間發生在你的類接收到訊息之前,但是在它的父類接收到initialize之後。