IOS学习5——属性与成员变量

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

ios中属性修饰符的作用

1. 属性用property声明

2. 简而言之,对于目前的ios开发,属性和成员变量的区别,完全可以不管。

3. 这个是历史原因造成的。苹果更换了默认的编译器(GCC转换为LLVM(low level virtual machine)),增加了一些编译器特性。

4. 以前使用GCC的时候,需要同时声明:属性和成员变量(实例变量)。

5. 现在使用LLVM的时候,不再需要为属性,声明对应的成员变量了。LLVM发现没有的话,会自动生成。

6. iOS5之后,不需要为属性,声明对应的成员变量,也不需要在 .m文件中 @synthesize 变量名,会自动生成get/set方法。

7. @synthesize 变量名  的作用就是生成get/set方法。[iOS5之后不需要写了,编译器会自动生成]

8. 特殊情况:category中的属性。category中只能添加方法,不能添加实例变量。如果增加属性,其实质是仅仅添加get/set方法而已,不会增加成员变量。

注意一点,匿名类别(匿名扩展)是可以添加实例变量的

总结

1. 成员变量用于类内部,无需与外界接触的变量。

2. 根据成员变量的私有性,为了方便访问,所以就有了属性变量。属性变量的好处就是允许让其他对象访问到该变量。当然,你可以设置只读或者可写等,设置方法也可自定义。所以,属性变量是用于与其他对象交互的变量。

一些建议:
1. 如果只是单纯的private变量,最好声明在implementation里.
2. 如果是类的public属性,就用property写在.h文件里
3. 如果自己内部需要setter和getter来实现一些东西,就在.m文件的类目里用property来声明

.h中的interface的大括号{}之间的实例变量,.m中可以直接使用;

.h中的property变量,.m中需要使用self.propertyVariable的方式使用propertyVariable变量

使用:

1. property生命在 .h中,外界可用,内部也可用

2. property生命在 .m中,外界不可用,内部可用

原文地址:https://www.cnblogs.com/mukekeheart/p/7521262.html