您的位置:首页 > 移动开发 > Objective-C

[Objective-C]-02-set get语法.类方法.self关键字与点语法

2015-07-16 21:22 507 查看

一. 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在类方法中的调用

@implementation Person
<span style="font-family: Arial;">+(void)test1 {</span>
}
+(void)test2 {
<span style="white-space:pre">	</span>[Person test1];

<span style="white-space:pre">	</span>[self test1];
}
@end


self在对象方法的调用

@implementation Person
-(void)test1 {
}
-(void)test2 {
[self test1];
}
@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的实现

@property int age// 等价于

- (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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: