黑马程序员 _6 OC基础 set get语法与点语法

来源:互联网 发布:购物网站源码 编辑:程序博客网 时间:2024/05/29 16:44





---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

一、XCode帮助文档找到了下载的方法,

菜单栏Xcode->Preferences选择Documentation,在线下载


二  set和get方法的使用

因为如果成员变量被定义为@public,那么就可以被任意赋值,而没有声明@public,又要管理成员的访问,就要使用set方法和get方法.

1.set方法用来设置成员变量,get方法用来访问成员变量,返回成员变量的值,实际情况中可根据是否需要修改成员变量的值来使用set方法,是否需要获取变量的值使用get方法.

2.set方法与get方法的命名规范:

set方法以set开头,而且后面跟上成员变量名,成员变量首字母必须大写.

get方法与成员变量同名;

成员变量的命名规范:都以下划线_开头,可以与get方法区分开,可以与其他局部变量区分开.

代码:

#import <Foundation/Foundation.h>// 声明@interface Car : NSObject{    int _wheels; // 轮子个数}/*set方法*/- (void) setWheels:(int)wheels;/*get方法*/- (int) wheels;@end@implementation Car// set方法的实现- (void) setWheels:(int)wheels{    // 对外面传进来的轮子数进行过滤    if (wheels<=0)    {        wheels = 1;    }        _wheels = wheels;}// get方法的实现- (int) wheels{    return _wheels;}

set方法和get方法的使用,保证了程序的封装性,

而封装的好处是: 过滤不合理的值,屏蔽内部的赋值过程,让外界不必关注内部的细节。

三、类方法

类方法就是利用类名直接执行的方法,以+号开头。

与对象方法的区别:

1.以加号开头,而对象方法以-号开头;

2.只能用类名调用(所以要继承NS0bject);

3.类方法不能访问成员变量,对象方法可以;

4.使用场合:不需要访问成员变量的时候,尽量使用类方法。

另外类方法与对象方法不是一个类型,所以可以同名。


四、self关键字、

self类似于java中的this关键字,在OC中没有this关键字,利用self可以调用调用当前的变量或方法。

self->成员变量名 访问的是当前方法调用的成员变量,

[self 方法名] 调用相应的方法(类的调用类的,对象的调用对象的)。self代表着当前方法的调用者。

self在类方法中的调用

 @implementation Student  + (void)test2 {   }    + (void)test3 {      [Student test2];           [self test2]; } @end
self在对象方法的调用
@implementation Student  - (void)test2 {   }  - (void)test3 {      [self test2];  } @end

五、点语法的应用

传统的set/get方法,较为繁琐,OC中提供了点语法来等价于set/get方法,

Student *stu = [Student new];  [stu setAge:100];  int age = [stu age];  
利用点语法
stu.age=100;  int age = stu.age;  
编译器会自动将点语法的方法展开为相应的set/get方法。

六、@property与@synthesize来替换set/get方法

@property用在.h文件@interface内,可以实现set/get的声明。

@synthesize在.m文件@implementation中实现set/get的实现

@propertyintage( 等价于

- (int)age;   // getter

- (void)setAge:(int)age;  // setter

@synthesizeage = _age等价于

- (int)age{

  return_age;

}

- (void)setAge:(int)age{

  _age= age;

}

//1.注意@synthesize age = _age; 如果变量age不存在,会自动生成一个@private的成员变量_age

//2.Xcode4之后,@property包括了@synthesize的功能,以后只要在.h文件中声明@property就可以完全替换setter和getter。




---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------


0 0