相比Swift而言,OC规矩太多.

差不多,.h中声明的属性和成员变量均可以在子类中访问到.而.m则不可.而属性其实也就是成员变量的一种简写,其内部自动包含了getter和setter方法.

如图:ViewController是SubController的父类.在ViewController.h中声明成员变量imageView1和属性imageView2

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

在ViewController.m中同样声明了成员变量imageView3和属性imageView4.

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

在ViewController.m中

1,通过self.xxx的方法可以出现imageView2和imageView4

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

2.通过 _XXX的形式只能出现imageView2,imageView4

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

3.通过XXX的形式只能出现imageView1.imageView3

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

在子类SubController.m中

1.通过self.XXX的形式只能出现imageView2

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

2.通过 _XXX的形式什么都不会出现.

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

3.通过XXX的形式可以出现imageView1

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

开发中,一般在成员变量前面加个_.

OC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHPOC中在.h和.m中声明的属性和成员变量有何区别?-LMLPHP

这样一来就明了了.

在本类中访问,通过self.XXX可以访问到imageView2和imageView4.

通过_XXX都可以访问,XXX则都不能

子类中,通过self.XXX可以访问imageView2,通过_XXX可以访问到imageView1,XXX则都不能.

(其中很多和旧版的OC语言有关,小生不了解)

总之,差不多就是在.h中声明的属性或者成员变量在其子类中均可以访问到,只不过形式不一样.

在.m中声明的属性或者成员变量只能在本类中访问到.

而属性其实就是成员变量的简写,内部自动包含了getter和setter方法.

我的理解是这样,不知对否.

05-11 14:45