`
yangwei0915
  • 浏览: 460754 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

object c中import和@class的区别

 
阅读更多

object c中import和@class都可以从引入一个类。 二者的区别在于:

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中声明的类进来.

 

使用@class,只能用来定义变量,不能继承,也不能调用该类的方法和变量。使用#import则可以进行。

分享到:
评论

相关推荐

    CAD_Import_VCL_6.1.rar_AutoCAD DWG_TsgDXFImage_delphi dwg_object

    CAD Import VCL 6.1 New features: - AutoCAD&Ouml DWG 2007 file format is supported. - AutoCAD&Ouml PROXY (including AEC) entities are supported. - HPGL/HPGL2 file format - Bezier splines are ...

    java jsonto对象互转

    public static <T> T jsonToObject(String jsonString, Class<T> pojoCalss) { Object pojo; JSONObject jsonObject = JSONObject.fromObject(jsonString); pojo = JSONObject.toBean(jsonObject, pojoCalss); ...

    iOS 面试题

    iOS 面试题: Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?...2.#import 跟#include 又什么区别,@class呢, #import<> 跟 #import”"又什么区别?

    笔试系统(二级C语言)

    import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.wireless.messaging.*; import java.io.IOException; import javax.microedition.io.*; public class Message extends ...

    simple-value-object:Python中的Value Object实现

    from simple_value_object import ValueObject class Point ( ValueObject ): def __init__ ( self , x , y ): pass point = Point ( 1 , 2 ) point . x # 1 point . y # 2 point . x = 5 # ...

    Spring原理模拟代码

    Object o = Class.forName(clazz).newInstance(); beans.put(id, o); for (Element propertyElement : (List) element .getChildren("property")) { String name = propertyElement....

    RWSingleton:在ObjC中快速创建单例类的宏

    在MyOjbect.h ,单行添加为: # import " RWSingletonMacro.h "@interface MyObject : NSObjectRW_DECLARE_SINGLETON_FOR_CLASS_WITH_ACCESSOR (MyObject, sharedObject)@end 在MyObject.m : # import " MyObject....

    Java笔记-通过反射获取注解及Spring中获取某包下的所有class文件

    这里的item是一个Object,如果是class,就会得到得到不一样的,但可以强转得到 这里的aClass是直接扫描的,class文件得到的 下面是Spring中获取某包下所有class文件。直接贴下代码把: private List getAllEntity...

    gallery简单实现 图片调整

    int[] ids1 { R drawable b R drawable c R drawable d R drawable f R drawable g }; @Override protected void onCreate Bundle savedInstanceState { super onCreate savedInstanceState ; ...

    springmvc-jdbcTemplate

    List, Object>> list = join(condition, orders, classLink); if(list == null) { return null; } List<R> ret = new ArrayList(); for (int i = 0; i (); i++) { ret.add(mapRowMapper.mapRow(list...

    对python中Json与object转化的方法详解

    python提供了json包来进行json处理,json与python中数据类型对应关系如下: 一个python object无法直接与json转化,只能先将对象转化成dictionary,再转化成json;对json,也只能先转换成dictionary,再转化成...

    IOS面试题归总

    static作用 #import和#include的区别,@class代表什么 线程和进程的区别? 堆和栈的区别? Object-C的内存管理? 为什么很多内置的类,如TableViewController的delegate的属性是assign不是retain?

    ember-classy-page-object

    余烬经典页面对象 在周围提供一个超级简单的类包装器。 用法 给定一个简单的ToggleButton组件,只需使用如下模板即可切换其活动状态: <...import PageObject , { clickable } from 'ember-clas

    classnames-react-native:适用于react-native的样式库,没有依赖项

    原料药classnames([styleObject][, [styleObject, conditions]])例子范例#1 import classNames from 'classnames-react-native'const A = { padding : 10 }const B = { backgroudColor : '#fff' }const C = { ...

    一个简单的开源Android工具类库

    ObjectUtils Object Unility Class PackageUtils Package Unility Class PropertyUtils Property Unility Class RandomUtils Random Unility Class ResourceUtils Resource Unility Class SHA1Utils Sha1 ...

    基于Flask+VUE前后端,在阿里云公网WEB端部署YOLOv5目标检测模型

    class Detector(object): def __init__(self): self.img_size = 640 self.threshold = 0.4 self.max_frame = 160 self.init_model() def init_model(self): self.weights = 'weights/yolov5m.pt' self....

    基于Flask开发后端、VUE开发前端框架,在WEB端部署YOLOv5目标检测模型

    class Detector(object): def __init__(self): self.img_size = 640 self.threshold = 0.4 self.max_frame = 160 self.init_model() def init_model(self): self.weights = 'weights/yolov5m.pt' self....

    实例:将报警信息实时发送至邮箱

    class txtMail(object): def __init__(self, host=None, auth_user=None, auth_password=None): self.host = "smtp.qq.com" if host is None else host # 设置邮件发送服务器 self.auth_user = "XXX@qq....

    python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)

    单目标跟踪: 直接调用opencv中封装的tracker即可。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Sun Jan 5 17:50:47 2020 ...class WatchDog(object): #入侵检测者模块,用于入侵检测 def __in

    Excel POI读取封装(文件+示范代码)

    i的范围是xls坐标中的数字(A‘1’,C‘10’) HSSFRow row = sheet.getRow(i); if (row == null) continue; HashMap, String> dataMap = null; if (row != null) { dataMap = new HashMap, String>(0); if ...

Global site tag (gtag.js) - Google Analytics