在OC中,我们新建一个类,得到两个文件:xx.h(方法声明文件)、xx.m(方法实现文件)。
方法又分为实例方法(+)和类方法(-),方法的格式如下:
-|+(返回值类型)方法名:参数列表
{
方法体;
}
特点:
1.类方法可以调用类方法
self 代表当前对象的指针
[self sayHi];
2.类方法不可以调用实例方法,但是类方法可以通过创建实例对象来访问实例方法
Person *person = [Person new];
[person sayHello];
3.类方法不可以使用实例变量。类方法可以使用self,因为self不是实例变量
NSLog(@”My name is %@, I‘m %ld years old ,I like %@”,_name,_age,_hobby);
4.类方法作为消息,可以被发送到类里面去,不能发送到对象里面去
}
构造器与访问器,同理于JAVA中get()方法以及set()方法。
通过构造器和访问器来间接访问类中的变量属性,既可以隐藏变量起到保护的作用,也可以提供访问的方法,不至于在需要调用相应属性时,到时属性无法访问。
getter和setter的引入带来的好处:
1.在setter中可以加入合法性检查,例如在俄罗斯方块中,检测方块向左移动是否越出游戏界面,如果越出,则返回false,终止向左移动操作。
2.更新与被设置变量相关的其他变量的值,例如模拟攀登高山的情景,在人的相对海拔改变时,相应的气温,空气含量等参数也需要改变。
3.在debug时,可以在其中,尤其是在stter中加入追踪log。
4.在多线程环境中,如果要保护对象的并发访问,则必须在getter和setter中加入同步锁。
构造器和访问器的代码如下:
//getter构造器
#import <Foundation/Foundation.h>
@interface Student : NSObject
{
NSString *_name;
NSInteger _age;
NSString *_hobby;
}
//设置器 与 访问器
//对于_name属性的设置器
- (void) setName : (NSString *)name;
//_name访问器
- (NSString *)name;
//_age设置器
- (void) setAge : (NSInteger)age;
//_age访问器
- (NSInteger)age;
//_hobby设置器
- (void) setHobby : (NSString *)hobby;
//_hobby访问器
- (NSString *)hobby;
@end
//访问器setter
#import "Student.h"
@implementation Student
-(void)setName:(NSString *)name{
_name=name;
}
-(NSString *)name{
return _name;
}
//对age属性来做正确性校验
-(void)setAge:(NSInteger)age{
if(age < 18){
_age=18;
}
else{
_age=age;
}
}
-(NSInteger)age{
return _age;
}
//正确性校验
-(void)setHobby:(NSString *)hobby{
_hobby=hobby;
if([_hobby isEqualToString:@"PLAY LOL"]){
_hobby = @"niuB";
}
else{
_hobby = @"lowB";
}
}
-(NSString *)hobby
return _hobby;
}
@end