OC學習之旅 (一) 內存管理及OC經常使用方法

      最近學習OC,因此在博客寫下本身的筆記.java

        OC的基本:  xcode

        1   id 至關於java的Object 表明任何對象. 因此id是關鍵字,不能用做變量!!學習

        2   oc中使用"."符號是調用  int a =object.a 是調用的是 [object getA]; this

  object.a=3; object.a是調用object.setA方法!!spa

      3 @property :  code

             Objective-C語言關鍵詞,與@synthesize配對使用。xcode4.5以及之後的版本,@synthesize能夠省略.htm

功能:讓編譯器自動編寫一個與數據成員同名的方法聲明來省去讀寫方法的聲明。要在頭文件聲明變量後,在聲明@property,再回到.m文件使用註解 @synthesize   . 假如在oc裏面.m中有@synthesize a , 但在.h頭文件中沒有這個屬性 和沒有@property a,它會自動生成的.還有關於@property標準寫法再下面貼出的例子有. 對象

    4 關於oc 的類的初始話 . oc的構造器方法是 init , 而不像java用類名的名字做爲成員方法.假如個人類中有一個ID的屬性,初始化它,並賦值給ID ,如:內存

-(id)initWithID:(int)newID{
    //判斷self是否爲空
    if(self = [super init]){
    
        _ID = newID;
        return self;    
  }

//返回null

return nil;
}

    由上面看出,oc沒有this 關鍵字.get

   4 oc的內存管理:(簡單的入門)

     1 方法  alloc  申請內存 ,假如要初始化一個類要怎麼調用 

     Student *stu = [[Student alloc] init];

    先申請內存,而後調用初始化方法.

    2 方法 retainCount 計數器,當計數器爲0時,說明這個類已經釋放掉了

    3 release  釋放內存 ,當retainCount爲0時釋放內存
   4 
retain 使計數+1 . 

      以上4個方法的綜合例子 例子:

    Book.h:

     

//
//  Book.h
//  clazz4_4_6
//
//  Created by qiang on 13-4-12.
//  Copyright (c) 2013年 qiang. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Book : NSObject{

    int _ID;
    Book *_book;
   
}

@property int ID;
@property Book *book;

-(void)print;
-(void)dealloc;
-(void)initWithID:(int)newID;


@end

        

       
   Book.m 

  

//
//  Book.m
//  clazz4_4_6
//
//  Created by qiang on 13-4-12.
//  Copyright (c) 2013年 qiang. All rights reserved.
//

#import "Book.h"

@implementation Book

@synthesize ID=_ID;
@synthesize book=_book;

-(void)print{

}

-(id)initWithID:(int)newID{

    if(self = [super init]){
    
        _ID = newID;
        return self;
    }
    return nil;
}

@end

   Student.h:

    

//
//  Student.h
//  class3_4_2
//
//  Created by qiang on 13-4-2.
//  Copyright (c) 2013年 qiang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Book.h"

@interface Student : NSObject {
    

    Book *_book;
    int _ID;
}

@property int ID;
@property Book *book;




@end


    student.m

//
//  Student.m
//  class3_4_2
//
//  Created by qiang on 13-4-2.
//  Copyright (c) 2013年 qiang. All rights reserved.
//

#import "Student.h"

@implementation Student

//在4.2如下必需要寫
@synthesize ID=_ID;
@synthesize book = _book;

-(void)setBook:(Book *)book{

    
    //返回book 計數器+1
    _book = [book retain];
}

//dealloc是當retainCount等於0的時候本身調用的
-(void)dealloc{
     //當你存在成員對象的時候,必需要調用全部成員對象變量的release
    [_book release];
    [super release];
    NSLog(@"Student %i dealooc",_ID);


}






@end

main:

   

//
//  main.m
//  clazz4_4_6
//
//  Created by qiang on 13-4-10.
//  Copyright (c) 2013年 qiang. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"


int main(int argc, const char * argv[])
{

    @autoreleasepool {
     
         Student *stu = [[Student alloc] init];
        
        Book *book = [[Book alloc]init]; //計數器 1
        
        NSLog(@"Book after alloc:%zd",[book retainCount]);
        
        
        
        stu.book = book;//經過retain 計數器爲2
        NSLog(@"Book after setBook:%zd",[book retainCount]);

        
        [book release]; //release 計數器爲1 若是計數器爲0 book則個就不能用
        NSLog(@"Book after release:%zd",[book retainCount]);
        //這時是book是stu建立的 當stu銷燬時,
        
        [stu release]; //當studeng
        
    }
    return 0;
}


 運行結果:

   

2013-04-13 00:31:55.782 clazz4_4_6[3716:303] Book after alloc:1

2013-04-13 00:31:55.784 clazz4_4_6[3716:303] Book after setBook:2

2013-04-13 00:31:55.785 clazz4_4_6[3716:303] Book after release:1

2013-04-13 00:31:55.785 clazz4_4_6[3716:303] Student 0 dealooc

相關文章
相關標籤/搜索