OC @class关键字

1.引用一个类的两种办法

@class:如果你只是定义成员变量、属性

#import:如果是继承某个类

2.两种方法的区别

#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;

Plain代码  

  1. #import<Foundation/Foundation.h>
  2. //#import "Book.h"类似
  3. @interface Book : NSObject
  4. @end
  5. @interface Student : NSObject
  6. {
  7. Book *_book;
  8. }
  9. @property Book*book;
  10. @end

@class方式只是告诉编译器在A.h文件中,B*b只是类的声明,具体这个类有什么信息,这里不需要知道。等实现文件中真正需要的时候,才会真正查看B类中的信息。

3.正确使用方法

Student.h文件:

Plain代码  

  1. //import<Foundation/Foundation.h>是为了知道Foundation框架有什么成员,和方法,避免重复定义等。
  2. #import<Foundation/Foundation.h>
  3. //声明的时候告诉是个类
  4. @class Book;
  5. @interface Student : NSObject
  6. {
  7. Book *_book;
  8. }
  9. @property Book*book;
  10. @end

Student.m文件:

//使用的时候,在告诉有什么成员和方法

Plain代码  

  1. #import "Book.h"
  2. @implement Student
  3. {
  4. … …
  5. }
  6. @end

[email protected]方式

使用@class方式由于只需要知道被引用类(B类)的名称就可以了,而在实现类由于要用到被引用类中的实体变量和方法,所以在.m文件中需要使用#import来包含引用类的头文件。

如果又上百个头文件都#import同一个文件,或者这些文件依次被#import,那么一旦最开始得头文件改动,后面引用到这个文件的所有类都需要重新编译一遍,这样的效率也可想而知的,而相对来讲,使用@class方式就不会出现这种问题。

当出现循环依赖干系的时候,#import会报错。

A.h文件

Plain代码  

  1. #import "B.h"
  2. @interface A : NSObject
  3. {
  4. B *b;
  5. }
  6. @end

B.h文件

Plain代码  

  1. #import"A.h"
  2. @interface B : NSObject
  3. {
  4. A *a;
  5. }
  6. @end
时间: 2024-11-11 19:40:24

OC @class关键字的相关文章

【《Objective-C基础教程 》笔记】(七)OC的关键字用意小结

1.  #import #import <> 从system目录中查找头文件,不会检查当前目录. #import "" 首先在当前目录中查找,如果未找到,则在Xcode设置的预处理程序搜索路径中查找文件. #import 指令可以防止头文件被重复包含 2. typedef 用于给一个类型定义新名称 或 简化较为复杂的类型声明. 3. #define 用于宏定义预处理. 4. 定义类 *.h 用于定义类的头文件 @interface 类 : 父类 @end *.m Objec

OC self关键字

在OC中 1 self是一个指针,在每一个方法中都有一个self指针 2 self可以出现在所有的方法中(对象方法和类方法),不能在函数中 3 self指向调用者.(谁调用它就指向谁) 4 可以使用self->成员变量 访问成员变量,可以使用[self 方法名]调用方法

OC 属性关键字

// 属性关键字 /* 1.ARC下(自动管理内存,自动引用计数)(IOS) strong,weak ----------------------------------------- 2.MRC下(手动管理内存,手动引用计数) copy       NSString assgin     基本数据类型 retain     对象类型 3.原子性 atomic      支持多线程 nonatomic   不支持多线程  <---目前就用这个 --------------------------

OC基础--关键字@property 和 @synthesize

一.@property关键字需要掌握的知识: 1.用在@interface中,用来自动生成setter和getter的声明 例:@property int age;--相当于执行了右边的代码-->-(void) setAge:(int) age; -(int) age; 二.@synthesize关键字需要掌握的知识: 1.用在@implementation中,用来自动生成setter和getter的实现 例:@synthesize age = _age; 2.注意:在 @synthesize

iOS开发-OC篇-KVC详解

说到KVC,不得不承认KVC在开发过程中是神器一般的存在.如果正确灵活使用kvc,会使得整个开发过程轻松很多. KVC的使用 1.KVC 全称 key valued coding 键值编码 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性.JAVA,C#都有这个机制.ObjC也有,所以你根部不必进行任何操作就可以进行属性的动态读写,就是KVC. KVC的操作方法由NSKeyValueCoding提供,而他是NSObjec

我是黑马-----OC与C语言的区别

C语言是面向过程的编程语言,而OC则是面向对象的编程语言. 面向对象:打个比方,就是你做一次菜,让老婆做个菜,吃饭,这就是面向对象,效率高 面向过程,就是每一个细节:比如你要先把或开到合适的位置.然后还要洗菜 ,等油热了,才能开始炒菜,然后调料,...,起锅,到碗里,吃饭.... 面向对象编程的代码更容易维护.它把具体的操作细节封装在类里,用的时候创建个对象,一顿调用方法,搞定!(当然类的实现方法还是需要自己写,面向对象只是一种编程思想.) OC继承.或者说是拓展于C语言,OC里可以直接写C语言

OC学习篇之---概述

前言 终于开启了OC的学习篇了,之前由于工作上的事,学习就一直搁浅了,不过最近由于各种原因,感觉必须要开启iOS的开发旅程了,不然就老了.因为之前一直是做Android的,所以学习iOS来就没那么费劲了,当然我们知道,Android是Java语言支撑的,iOS是OC支撑的,关于OC的学习,会和Java相对比这来,这样效率也会高点,同时在大学里学了C/C++所以,学习OC就没什么难度了,就是一套新的api. 概述 目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会

《OC疯狂讲义》笔记(一)

1.OC简介 Objective-C    继承自C和smalltalk 最小程度增加了面向对象的部分,是一门面向对象编程语言 1986. Next 得到授权 关于 Cocoa 框架(96) Cocoachina.com code4app.com 2.OC HelloWorld OC的文件有哪几种? .h  头文件(声明类) .m  OC源文件(类的实现) #import <Foundation/Foundation.h>  //导入文件 //main函数是OC得主入口函数 int main(

(转载)OC学习篇之---概述

前言 终于开启了OC的学习篇了,之前由于工作上的事,学习就一直搁浅了,不过最近由于各种原因,感觉必须要开启iOS的开发旅程了,不然就老了.因为之前一直是做Android的,所以学习iOS来就没那么费劲了,当然我们知道,Android是Java语言支撑的,iOS是OC支撑的,关于OC的学习,会和Java相对比这来,这样效率也会高点,同时在大学里学了C/C++所以,学习OC就没什么难度了,就是一套新的api. 概述 目前来说,Objective-C(简称OC)是iOS开发的核心语言,在开发过程中也会