黑马程序员--IOS_内存管理_@class和循环引用的问题。

来源:互联网 发布:html中链接淘宝首页 编辑:程序博客网 时间:2024/06/06 01:58

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


一、循环引用的问题

1、如果:A中包含B,B中包含A,并且都是通过#Import 引用会出现错误。


这时在.h文件中,通过@class 类,仅仅告诉编译器引用的是一个类。

在.m文件中 通过#import引用所有内容。


循环引用的解决办法:一段用retain,一段用assign。


2、示例代码

@class User;

@interface Card : NSObject

@porperty (nonatomic,  retain, readwrite) User *user; // 用 retain   

@end // Card


@implementation Card

- (void) dealloc

{

   [_user release];  // 释放 用户对象。

}

@end // Card


@class Card;  // 告诉编译器Card是类。

@interface User : NSObject

@porperty (nonatomic, assign, readwrite) Card *card; // 用 assign  这样就解决了,循环引用的问题。

@end // User


@implementation User

@end // User


二、@class和#import的区别

问题: @class 和 #import 的区别

1. @class 仅仅告诉编译器引用的是类。 可以提高编译器性能。因为不用引入类里面的所有内容。

2.在@implementation里面引入所用的类的内容,通过#import。此外#import可以自动避免重复引用的问题。

0 0
原创粉丝点击