[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。
相关文章推荐
- Objective-C之代码块(block)的使用
- How Do I Declare A Block in Objective-C?
- NSRange用法 oc
- API--Object,String,Scanner--2
- API--Object,String,Scanner--1
- net.sf.json.JSONObject 和org.json.JSONObject 的差别
- Objective-C Runtime (转载)
- Swift 调用 Objective-C 代码
- merge javascript Object
- [转]ECMAScript5 Object的新属性方法
- Objective-c单例模式的正确写法--用dispatch 线程安全
- Objective 和 Swift相互调用
- OC基础回顾(六)了解和使用Xcode
- Objective-C 属性特性详解
- qtobject简介
- Objective-C之内存管理
- 【Objective-C】self关键字
- 【Objective-C】 OC编码规范
- 对象引用(object reference)与对象指针的区别
- IOS开发系列--Objective-C之KVC、KVO