`
阿尔萨斯
  • 浏览: 4110168 次
社区版块
存档分类
最新评论

OC-内存管理的一些要点

 
阅读更多

创建一个BOOK对象,对其属性进行声明 定义。

@property 属性声明 定义了对属性的赋值

-(void) dealloc 方法在对象销毁的时候进行调用;


#import <Foundation/Foundation.h>

@interface Book : NSObject
@property (nonatomic,assign) int price;
@end


#import "Book.h"

@implementation Book

-(void)dealloc
{
    NSLog(@"Book is dealloc");
    [super dealloc];
}

@end


创建一个Person对象,对其属性进行声明 定义。

@property 属性声明 定义了对属性的计数加一并在-(void) dealloc 方法在对象销毁的时候减一;


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

@interface Person : NSObject

@property (nonatomic ,retain)Book *book; 

@end

#import "Person.h"

@implementation Person


-(void)dealloc
{
    [_book release];
    NSLog(@"Person is dealloc");
    [super dealloc];
}

@end


在main函数中,声明两个对象,并同时在使用完后进行销毁。遵循了谁创建谁销毁的原则。

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

int main(int argc, const char * argv[])
{
    Person *p=[[Person alloc] init]; 
    
    Book *b=[[Book alloc] init];
    b.price=45;
    p.book=b;
    [b release];
    
    NSLog(@"%d ",p.book.price );
    
    
    [p release];

    return 0;
}

@property属性的参数分别为

assign,retain,copy-针对引用计数,assign为默认,并在非oc对象作为属性时使用

nonautomic,automic-在线程中起一定的作用,一般nonautomic效率会高点,默认是automic

readonly,readwrite-对属性进行setter getter存储,一般默认是readwrite


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics