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

来源:互联网 发布:主力意图分析 知乎 编辑:程序博客网 时间:2024/05/21 19:26

嘛,第一次写博客,先贫两句吧。

我一直都很懒,总之就是没人让我做事的话我一般是不会主动找事做的。

然,前两天和一个同样做iOS的朋友聊天,他说他经常写一些博客,然后balabaleba的说了好多写博客的好处。

我只记住了写博客能让我们变得越来越NB这一条了,嗯。

所以,我决定要养成写博客的“NB”习惯~

刚开始,就从简单的开始说起吧。

下面进入正题:

相信很多初学者都对OC中得点语法和->的使用比较模糊,下面我来给大家做详细的说明。

@synthesize实现的属性,可以用点语法,赋值和取值都可以,如:


p.name=@"aaaaaaaa";//可以用点语法直接给属性赋值

NSLog(@"-------%@",p.name);//可以用点语法取属性值


定义了属性也可以用getter和setter,如:


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

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


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

1.自定义的get的方法的方法名必须定义为name才能使用点语法的取值功能。即:如果你定义的方法名是getName,那么你可以用NSLog(@"-------%@",[p getName])来打印name的值,但是你用NSLog(@"-------%@",p.name),就会报错。如果你定义的方法名是name,那么这两种你都可用。

2.和get一样,set方法的名字也需要定义成固定setName的时候才能使用点语法,否则不行。

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


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


关于可见度:

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


0 0
原创粉丝点击