self关键字
类似java中的this,防止局部变量将成员变量覆盖、冲突
//使用方法
-(void) setAge:(int)age
{
self->age = age;
}
-(int)age
{
return self->age;
}
self 调用方法: [self 方法名]; self调用方法时要注意避免调用自己,否则造成死循环。
点语法
除了get和set的调用,oc中提供了另一种可以实现get、set的调用语法,称为点语法。它的本质就是get、set。当使用点语法获取值当时候,系统调用相关的get方法,
//Student.h
#import <Foundation/Foundation.h>
@interface Students : NSObject
{
@private
int _age;
}
-(int) age;
- (void) setAge:(int)age;
@end
//Student.m
#import "Students.h"
@implementation Students
-(void) setAge:(int)age
{
self->_age = age;
}
-(int) age
{
NSLog(@"age = %d",_age);
return self->_age;
}
@end
//main
#import <Foundation/Foundation.h>
#import "Students.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Students *stu = [[Students alloc]init];
stu.age=18; <span style="font-family: Arial, Helvetica, sans-serif;">//等同于 [stu setAge:18];</span>
int age =stu.age; <span style="font-family: Arial, Helvetica, sans-serif;">//等同于 int age = [stu age];</span>
} return 0;
}
若在set、get中使用点语法,会造成循环引用。
属性
oc定义成员变量时,先对其进行封装,之后提供ge、set提供外界访问操作,但其过于繁琐,增大工作量,为此,oc提供了属性,可以替代set、get方法。 属性对声明: 以关键字@property开头,它可以出现在一个类的@interface代码部分的方法声明列表中的任何位置。 语法格式: @property(特性1,特性2……) 变量类型 变量名; 括号中的特性是可选的, 它是对属性行为的描述。 示例: @property int age; 等同于:
{
@private int _age;
}
-(int) age;
- (void) setAge:(int)age;
description 方法
类似于java中的toString。若要用NSLog打印对象,需要重写description方法。 否则只会答应出对象的内存地址。