OC学习之旅 (一) 内存管理及OC常用方法

      最近学习OC,所以在博客写下自己的笔记.

        OC的基本:  

        1   id 相当于java的Object 代表任何对象. 所以id是关键字,不能用作变量!!

        2   oc中使用"."符号是调用  int a =object.a 是调用的是 [object getA]; 

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

      3 @property : 

             Objective-C语言关键词,与@synthesize配对使用。xcode4.5以及以后的版本,@synthesize可以省略.

功能:让编译器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。要在头文件声明变量后,在声明@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 关键字.

   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

 

    

  

转载于:https://my.oschina.net/janson2013/blog/122465

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值