主要为了解决引用死锁
1.import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。
2.在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。
3.在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。
4.如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。
所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来.
retain和copy的区别
retain和copy的区别 2009年08月13日, 11:11 下午 原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别。那究竟是有什么区别呢? assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。 Retain vs. Copy!! copy: 建立一个索引计数为1的对象,然后释放旧对象 retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1 那上面的是什么该死的意思呢? Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString对象,地址为0×1111,内容为@”STR” Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化 retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1 也就是说,retain是指针拷贝,copy是内容拷贝。哇,比想象的简单多了…
分享到:
相关推荐
@property中的retain,copy,assign区别
retain和copy还有assign的区别
详细讲解了ios中常用关键字的使用方法的区别,着重讲解了assign,retain,copy之间的区别
@property (nonatomic, retain) NSMutableString *currentResult; @property (nonatomic, retain) NSMutableDictionary *map; @property (nonatomic, retain) NSMutableArray *list; -(NSMutableDictionary *)...
IOS中(assign,retain,copy,weak,strong)的区别以及nonatomic的含义 我们在声明@property 属性时,总是要在括号中写上assign、retain、copy、weak、strong中的一个,很多时候,我们仅仅只是按照习惯去写经常写...
针对iOS 对象的属性的关键字(retain/assign/readonly等)的区别。彻底解决您的疑惑。
要求安装JFObjectMapping 可通过,要安装它,只需添加到您的 Podfile 中: pod "JFObjectMapping"用法首先,导入类并实现 +load 方法,例如: #import <Foundation>#import "NSObject+JFObjectMapping.h"@class ...
对于Retain和Assign属性的理解
@class PaomaViewController; @interface PaomaAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; PaomaViewController *viewController; } @property (nonatomic, retain) IBOutlet ...
@class ImageProcessingViewController; @interface ImageProcessingAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; ImageProcessingViewController *viewController; } @property ...
leetcode题库 iOS-Interview-Questions 使用指南 $ git clone --recursive --depth=1 ...iOS 面试问题列表 ...keyWindow和window的区别 ...copy retain区别 ...#import、#include、@class的区别? UIView和CALa
static作用 #import和#include的区别,@class代表什么 线程和进程的区别? 堆和栈的区别? Object-C的内存管理? 为什么很多内置的类,如TableViewController的delegate的属性是assign不是retain?
Google Objective-C Style Guide 中文版 目录 例子 空格与格式 空格与制表符 行宽 方法声明与定义 ...Setters中对NSString进行copy 避免抛出异常 nil的检查 BOOL陷阱 属性 Cocoa模式 委托模式 模型-视图-控制器
SAS-The RETAIN Statement; Retain的用法,英文版。
主要介绍了iOS开发之详谈属性设置readwrite、readonly、retain、copy、assign、nonatomic的相关资料,需要的朋友可以参考下
我们已经看到 alloc, retain, release, and dealloc 在 GNUstep 中的实现,同时也学到了如下知识:所有的 OC 对象有一
NSArray *arrayPic = [xpathParser searchWithXPathQuery:@"//div[@class= 'item-box']/div[@class= 'pic']/p/a/span/img/attribute::src"]; NSArray *arrayUrl = [xpathParser searchWithXPathQuery:@"//div[@...
开发中经常会碰到要设置UI的某个生僻的外观属性,虽然在头文件中都能查到,但一是每个控件的头文件比较分散繁杂,二是每个头文件里有太多不用到的方法和属性,所以这里将UIKit的外观属性及方法从头文件中抽取出来,...
自定义对象要实现归档必须实现NSCoding协议 ... #import @interface user : NSObject @property(nonatomic,retain)NSString *name; @property(nonatomic,retain)NSString *email; @property(nonatomic,r