ios的属性和成员变量在.h文件和.m文件的不同

今天被一个最近在学ios的同事问了一个问题:属性写在.h文件中和在.m文件中有什么区别?当时错愣了一下,隐约记得似乎有区别的,但是想不起来,根据自己的经验告诉他,说没区别,结果找了资料发现自己错了,好尴尬,把这些基础的给忘了。

属性在.h文件中和在.m中声明是有区别的。区别就是,在.h文件中声明的属性,外部类可以通过“类实例.属性”来调用,但在.m中声明的则不可以,获取和设置的方法,只能是通过setValue:forKey和valueForKey来实现。

成员变量,有三种权限,就是大家都知道的@private、@protected、@public ,写在.m文件中时,相当于是@private权限,子类无法访问,验证了一下,做权限修改也无效。而写在.h文件中,默认是@protected权限,子类可以访问,可以做权限修改。因为访问权限指针对.h文件。.h文件中成员变量,外部类对其的调用,跟C++一样,用->来调用。

以下摘自:http://blog.sina.com.cn/s/blog_68f368050101eop8.html

@interface部分为类扩展(extension)。

其被设计出来就是为了解决两个问题的,其一,定义类私有方法的地方。其二,实现public readonly,private readwrite的property(意思是在h头文件中定义一个属性对外是readonly的,但在类的内部希望是可读写的,所以可以在m源文件中的@interface部分重新定义此属性为readwrite,此时此属性对外是只读的,对内是读写的)。

此外,也可在此部分申明变量和属性,但申明的变量,属性和方法均为私有的,只能够被当前类访问,相当于private。

时间: 2024-10-05 05:06:58

ios的属性和成员变量在.h文件和.m文件的不同的相关文章

iOS的属性和成员变量在.h文件和.m文件中的不同

在.h文件中声明的属性可以通过点语法访问,而在.m文件中声明的属性只能通过setValue:forKey和valueForKey设置和获取 成员变量,有三种权限,就是大家都知道的@private.@protected.@public ,写在.m文件中时,相当于是@private权限,子类无法访问,验证了一下,做权限修改也无效.而写在.h文件中,默认是@protected权限,子类可以访问,可以做权限修改.因为访问权限指针对.h文件..h文件中成员变量,外部类对其的调用,跟C++一样,用->来调用

Objective-C - 属性和成员变量在.h文件和.m文件区别

属性和成员变量在.h文件和.m文件区别 属性在.h文件中和在.m中声明是有区别的.区别就是: 在.h文件中声明的属性,外部类可以通过"类实例.属性"来调用, 但在.m中声明的则不可以,获取和设置的方法,只能是通过setValue:forKey和valueForKey来实现. 成员变量,有三种权限,就是大家都知道的@private.@protected.@public ,写在.m文件中时,相当于是@private权限,子类无法访问,验证了一下,做权限修改也无效.而写在.h文件中,默认是@

【转】iOS中属性与成员变量的区别

转载自http://www.cnblogs.com/crazypebble/p/3439261.html 一.类Class中的属性property 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: @interface MyViewController :UIViewController { UIButton *myButton; } @property (nonatomic, retain) UIBut

iOS中属性与成员变量的区别

一.类Class中的属性property 在ios第一版中,我们为输出口同时声明了属性和底层实例变量,那时,属性是oc语言的一个新的机制,并且要求你必须声明与之对应的实例变量,例如: @interface MyViewController :UIViewController {     UIButton *myButton; } @property (nonatomic, retain) UIButton *myButton;@end 最近,苹果将默认编译器从GCC转换为LLVM(low lev

Object-c中的属性和成员变量的关系详解

很多人在初学移动开发的时候会对object-c中的合成存取方法感到疑惑,此处尝试为看到本文有缘人答疑解惑,鄙人才疏学浅,难免有疏漏谬误之处,热烈欢迎诸位看官拍砖指点. 1.合成存取方法: OC为增加开发效率,从2.0之后不需要程序员自己来写成员变量的setter和getter方法,取而代之的是自动合成的setter和getter. 系统自动合成setter和getter需要2步: 在类interface部分用@propert指令定义属性. 在实现部分用@synthesize指令声明属性. 属性的

Objective-C的属性和成员变量用法及关系浅析

在使用Objective-C语言进行了一段时间的iOS开发之后,发现自己的语言基础相对薄弱,于是开始弥补自己的短处.我发现在用过一种语言之后,再回过头来看它的很多原理会发现有更加深刻的理解.下面就对一直困惑我的属性和成员变量的用法和关系问题进行浅析,由于水平有限可能会有错误,请看过文章的人多多指正. 1.属性 关于属性的用法在苹果的官方文档<The Objective-C Programming Language>中有详细的说明,在这里就不再赘述,链接如下: <The Objective

属性 与成员变量的 区别与联系 及属性修饰词理解

成员变量和属性的区别与联系在于: 成员变量是一个“内”概念,反映的是类的结构构成.属性是一个“外”概念,反映的是类的逻辑意义. 成员变量没有读写权限控制,而属性可以指定为只读或只写,或可读可写. 成员变量不对读出作任何后处理,不对写入作任何预处理,而属性则可以. public成员变量可以视为一个可读可写.没有任何预处理或后处理的属性. 而private成员变量由于外部不可见,与属性“外”的特性不相符,所以不能视为属性. 虽然大多数情况下,属性会由某个或某些成员变量来表示,但属性与成员变量没有必然

Objective-C——属性与成员变量辨析

上篇中提过,成员变量是在一对大括弧里面声明的:而属性是用先@property声明再用@synthesize合成的.属性是oc语言的一个新的机制,在实际的使用中这两者还是有不少差别的. 类中的成员变量.通过权限修饰符@protected.@private.@public更该它的被訪问权限.而属性是属于类的对象的,通过生成一个该类的对象我们就能够获得它的訪问权. FirstClass.h #import <Foundation/Foundation.h> @interface FirstClass

关于属性,成员变量的认识

关于属性和成员变量概念的说法,网上搜了很多,没找到特别明确的说,而且还更加混乱了. 根据自己的认识和从网上搜索的信息稍微总结一下: 看法1.从访问权限上区分 属性和成员变量说到底都是变量,只是他们的访问权限不同. 在.h文件的{}中声明的变量,默认是protect 在.m文件的interface(){}声明的变量,默认是private 在.m文件中声明的变量,在其他类中不可以调用: 在.h文件中声明的变量,在其他类中可以调用. 看法2.交互性的角度 成员变量用于类内部,无需与外界接触的变量. 根