`
R任轩
  • 浏览: 15874 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Objective-C中.h文件、.m文件中@interface、@synthesize

 
阅读更多

我们可能都不太分的清.h文件和.m文件里各种结构的用途和区别,那我们来仔细的区分一下。

首先写一个class类:

.h文件:

@interface ClassName{
    NSString* _value;
}

@property(nonatomic,assign)NSString* value;

-(void)func;

.m文件:

@interface ClassName(){
}
@end

@synthesize value;

@implementation ClassName

-(void)func{
}

@end

  大体上就是这个格式。很多人,包括我,在创建和使用Class时,直接就使用这样的模板。这个模板里有一些有意思的小东西,值得探讨,比如: 

1. 为什么.h文件和.m文件里各有1个@interface?它们分别有什么用? 
2. .h中,value为什么要定义2遍? 
3. @synthesize有什么用? 
还有一些其它的问题,今天先解决上面提到的这几个。

为什么.h文件和.m文件里各有1个@interface?它们分别有什么用?

.h里面的@interface,不消说,是典型的头文件,它是供其它Class调用的。它的@property和functions,都能够被其它Class“看到”。

而.m里面的@interface,在OC里叫作Class Extension,是.h文件中@interface的补充。但是.m文件里的@interface,对外是不开放的,只在.m文件里可见。

因此,我们将对外开放的方法、变量放到.h文件中,而将不想要对外开放的变量放到.m文件中(.m文件的方法可以不声明,直接用)。

有的同学看到Class Extension,可能会想到OC里的@protocol。是的,它们都是对一个Class的扩展。不过它们的区别也很明显:

Class Extension只能用在能得到源代码的情况下,而@protocol在得不到源码的时候也可以使用。

因此@protocol一般用作对一些系统Class的扩展,常见的比如对NSString、UIView等。

.h中,value1为什么要定义2遍?

当然,现在@interface{}里的定义也可以省略掉了,不过原理还是要搞清楚。

严格来说@interface{}里定义的变量,叫作instance variable,它是这个Class内部真正的全局变量。然而这个instance variable是不对外公开的,因此我们还需要一个对外公开的东西来调用,就是@property 
@property是对外的,它其实是告诉大家,我这个Class里,有一个变量的set/get方法。比如,@property NSString* string; 就是说,本Class里有一个getString/setString供你们调用。

因此需要2次声明。当然现在lldb也升级了,只要你声明了@property,它就可以自动创建对应的全局变量。

@synthesize有什么用?

@property 一个变量后,在@implementation里再@synthesize一下,相信是很多人的习惯。但是为什么要有这个@synthesize方法呢?

@property是对外声明了Class的get/set方法,然后我们就需要在.m文件里手写get/set方法。这可就麻烦了,1个变量对应2个方法,假如一个Class里有10个变量,那岂不是要写20个方法?烦也烦死唠。

@synthesize帮我们解决了这个问题。@synthesize在.m文件里自动生成了get/set方法。因此,我们只要在@implementation后面加上一行:@synthesize 就可以自动生成get/set方法了,省掉了很多麻烦。比如@synthesize value = _value;的意思就是,将instance variable _value用作getValue和setValue方法里。

分享到:
评论

相关推荐

    Objective-C Succinctly.pdf

    - **nil和NULL**:分别表示Objective-C和C语言中的空值。 - **Foundation框架数据结构**: - **NSNumber**:用于包装原始数据类型。 - **NSDecimalNumber**:用于处理十进制数值。 - **NSString**:用于表示不可...

    Objective-C语言教程与案例.zip

    2. **语法结构**:Objective-C的语法有其独特性,比如它的方法定义和调用方式,以及在C语言基础上添加的“@”符号,如@property和@synthesize关键字。文档可能详细解释了这些语法元素的使用。 3. **Foundation框架*...

    学习Objective-C: 入门教程

    在Objective-C中,每个源文件通常分为两个部分:头文件(.h)和实现文件(.m)。头文件包含了类的声明和接口,而实现文件包含了类的方法实现。此外,Objective-C还支持.mm文件类型,允许在Objective-C代码中混合使用...

    Programming-in-Objective-C-2.0.zip_in

    《Programming in Objective-C 2.0》是学习Objective-C编程语言的重要教材,主要面向初学者,也适合有一定编程基础但对Objective-C不熟悉的开发者。Objective-C是Apple开发平台上的主要编程语言,尤其在iOS和macOS...

    Objective-C基础教程.pdf.zip

    Objective-C使用关键字`@interface`来声明类,`@implementation`来实现类,`@property`来声明属性,`@synthesize`(在较新版本的Objective-C中,通常是自动合成的)来生成存取方法。 消息传递是Objective-C的核心...

    Objective-C

    Objective-C是在C语言的基础上扩展了Smalltalk式的面向对象特性,使得它既有C语言的强大功能,又具备了面向对象编程的灵活性。 在Objective-C中,类是所有对象的基础。类定义了一组属性(实例变量)和方法(函数)...

    Objective-C语言教程、案例与项目资源详解.docx

    ### Objective-C语言教程、案例与项目资源详解 #### 一、Objective-C基础知识 **1.1 类与对象** Objective-C的核心概念是类和对象。类是对象的模板或蓝图,它定义了对象应该具备哪些属性(如变量)和行为(如方法...

    objective-c的计算器

    1. **Objective-C基础**:Objective-C是C语言的超集,它引入了Smalltalk的类、消息传递等面向对象特性。了解基本的数据类型、变量声明、控制流语句(如if、for、while)以及函数定义是开始的基础。 2. **类和对象**...

    Objective-C基础教程.docx

    - **定义**:Objective-C是一种结合了C语言特性和Smalltalk风格消息传递机制的通用、面向对象的编程语言。 - **应用领域**:主要用于苹果的操作系统macOS和iOS及其API(Cocoa和Cocoa Touch)。 #### 二、Objective-...

    Objective-C基础知识及简介.docx

    在Objective-C中,接口(interface)和实现(implementation)是两个非常重要的概念: - **接口**:通常在一个`.h`文件中定义,它描述了类的公共API,包括属性和方法声明。例如: ```objective-c @interface MyClass ...

    Object-C资源.docx

    - **与C兼容**:由于它是C语言的扩展,因此可以直接在Objective-C程序中混合使用C代码。 - **动态消息传递**:Objective-C采用动态消息传递机制,这意味着当一个方法被调用时,实际上是向对象发送一条消息。 - **...

    Objective-c解析XML封装

    @interface XmlResolve : NSObject { } @property (nonatomic, retain)NSString *objName; @property BOOL *isList; @property (nonatomic, retain) NSMutableString *currentResult; @property (nonatomic,...

    Objective-C程序设计

    在实际开发中,Objective-C通常与Xcode IDE结合使用,通过Interface Builder设计用户界面,并利用Storyboard组织视图控制器的导航流程。Swift的出现虽然在一定程度上替代了Objective-C,但对于现有的大量Objective-C...

    [Objective-C.2.0程序设计

    《Objective-C 2.0程序设计》是一本深入讲解Objective-C 2.0这门编程语言的书籍,主要面向想要学习或已经有一定基础的iOS和macOS开发者。Objective-C是苹果平台开发的主要语言,它是C语言的一个超集,融入了...

    objective-c

    Objective-C 类的定义通常由两部分组成:头文件(.h)与实现文件(.m)。这种设计方式有助于提高代码的封装性和模块化。 ##### 头文件 (Test.h) ```objective-c @interface Test : NSObject { int intX; // 实例...

    Objective-C经典入门源代码

    Objective-C是在C语言的基础上扩展的,因此,它继承了C的语法特性,如变量声明、控制结构(如if-else、for、while)、函数等。同时,它引入了消息传递机制,这是面向对象编程的核心。在Objective-C中,对象通过发送...

    objective-c 程序设计 + 代码

    在这个“Objective-C程序设计+代码”主题中,我们将深入探讨这个语言的核心概念、语法以及如何通过实际代码示例来运用这些知识。 一、Objective-C基础 1. **类与对象**:Objective-C中的所有事物都是对象,它们由...

    Objective-C Cheat Sheet

    在Objective-C中,类的定义通常分为两部分:头文件和实现文件。头文件以`.h`结尾,用于声明类的接口,包括属性和方法。 ```objective-c #import "AnyHeaderFile.h" @interface ClassName : SuperClass { // 声明...

    Objective-C Cheatsheet

    - 在Objective-C中,一个类由两部分组成:类头文件(.h)和类实现文件(.m)。 - 类头文件中包含了类的公共接口,包括继承的父类、公共属性和方法声明。 - 类实现文件则包含了类的私有属性、私有方法和方法的具体...

Global site tag (gtag.js) - Google Analytics