关于OC中成员变量,属性的一些基本知识(针对初学者)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weilaizhuan/article/details/43984251

属性也可以用gettersetter,如:


[p setName:@"bbbbbbb"]; //默认生成的set方法的方法名是setName

NSLog(@"-------%@",[p getName]);//注:用属性生成的get方法默认的方法名是name,不是“getName”。所以不能用getName调用,这里要注意。


如果没有用@property将成员变量定义为属性,而是自己定义get(访问器),set(设置器)方法实现成员变量的赋值取值,则要注意:

1.自己定义的getter(访问器)最好不要定义成get+属性名,例如:getName。因为,OC中底层的一些函数的实现已经占用了get方法。那么这时如果你这样定义,那么很可能造成冲突。一般我们直接用属性名(如name)作为访问器的关键字。


2.OC中得点语法的用法和C中稍有不同:在C中,你可以直接用p.name进行复值取值,但是在OC中你要注意,OC中用点语法给实例变量赋值,可直接用p.name=@“aaaaa”,但是取值就和C不一样了。取值的使用方法是“p.访问器关键字。即:如果你定义的访问器是getName,那么你用点语法取实例变量name的值就要用p.getName,而不是p.name,这点要注意。


3.如果你没用@property 定义属性,而是自己定义访问器和设置器,那么如果你只定义了get,你就能用点语法的取值功能,如:NSLog(@"-------%@",p.name),但是不能用赋值功能set。反之也一样。


最后,只有设置为属性的或者自己定义了设置器访问器的实例变量才能使用点语法。


关于可见度:

@public 声明为公共的成员变量,不需要设置器和访问器就可以访问该变量,当然你也可以添加设置器访问器。访问的方式为p->name,只能用这种方式访问变量,否则会报错。

猜你喜欢

转载自blog.csdn.net/weilaizhuan/article/details/43984251
今日推荐