以下是我在优快云浏览到的两篇文章,转载到这里做个tag
文章一:(出处:https://blog.youkuaiyun.com/u010545480/article/details/46377011)
以前我定义变量一直都是定义在.h文件中,后来看别人的代码,发现很多人都把一些变量定
义在.m文件中。后来我自己试了一把,发现变量既可以定义在.h文件中也可以定义在.m文
件中,虽然这是个很小的问题,或许有些人会说既然都可以,那不随你定义在哪里喔,但是
我一直觉得肯定会有区别的,后来我终于找到了一个能说服我的解释了。
一、变量定义在.h文件中
@interface BaseTableViewController : BaseNavViewController
{
UIView *backgroud;
UIActivityIndicatorView *activity;
UIImageView *imageNonet;
UILabel *labError;
UILabel *labRetry;
}
二、变量定义在.m文件中
@interface BaseTableViewController ()
{
UIView *backgroud;
UIActivityIndicatorView *activity;
UIImageView *imageNonet;
UILabel *labError;
UILabel *labRetry;
}
其实这两种定义方式从写法上来说是没有问题的,但是从代码规范来看却是有问题的。
.h文件中一般放的是一些对外公开的变量或者是方法,而.m文件中一般放的是自己私有的一些变量和方法。比如说,我们要写一个SDK给别人调用,我们把写好的代码打包成一个静态库,调用者只能够看到.h文件,那么我就把需要传入的参赛变量和调用的方法写在 .h 文件中。对于一些与调用者无关而我们自己要需要的变量或是方法我们就可以放在 .m文件中。其实通俗的说就是对外公开的变量或是方法就定义在 .h 文件中,对内私有的变量或是方法就定义在 .m 文件中。
补充
如果定义一个属性类,供其他类调用,则这些属性全部要定义在.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)。
其被设计出来就是为了解决两个问题的,
其一,定义类私有方法的地方。
其二,实现publicreadonly,private readwrite的property(意思是在h头文件中定义一个属性对外是readonly的,但在类的内部希望是可读写的,所以可以在m源文件中的@interface部分重新定义此属性为readwrite,此时此属性对外是只读的,对内是读写的)。
此外,也可在此部分申明变量和属性,但申明的变量,属性和方法均为私有的,只能够被当前类访问,相当于private。