今天我学习了类方法和self关键字的用法,下面具体讲讲:
一. 方法:在OC中,方法可以分为类方法和对象方法:
1.对象方法:
1)- 以减号开头
2)只能由对象来调用
3)对象方法中能访问当前对象的成员变量(实例变量)
2.类方法:
1)+ 以加号开头
2)只能由类名来调用
3)类方法中不能方位成员的实例变量
3.类方法的好处
1)不依赖于对象,执行效率高
2)能用类方法,尽量用类方法
4.使用场合:
当方法内部不需要使用到成员变量的时候,可以使用类方法,可以允许类方法和对象方法同名.
下面是我写的一个小程序,具体说明了类方法的用法:
#import <Foundation/Foundation.h>
// 声明
@interface Student : NSObject
{
int _age;
}
+ (void)test1;//类方法
- (void)test1;//对象方法
@end
@implementation Student
- (void)test1
{
NSLog(@"对象调用了我!");
}
+ (void)test1
{
NSLog(@"类方法调用了我!");
}
@end
int main()
{
[Student test1];// 类方法调用了我!
Student *s = [Student new];
[s test1];//对象调用了我
return0;
}
二. self关键字 :1)谁调用了当前方法,self就代表谁
self出现在对象方法中,self就代表对象
self出现在类方法中,self就代表类
2)在对象方法利用"self->成员变量名"访问当前对象内部的成员变量
3)[self 方法名]可以调用其他对象方法\类方法
指向的是方法调用者,代表当前的对象,注意体会下面的代码:
#import <Foundation/Foundation.h>
// 声明
@interface Student : NSObject
{
int _age;
}
+ (void)test1;//类方法
- (void)test1;//对象方法
@end
@implementation Student
- (void)test1
{
NSLog(@"对象调用了我!");
}
+ (void)test1
{
NSLog(@"类方法调用了我!");
}
@end
int main()
{
[Student test1];// 类方法调用了我!
Student *s = [Student new];
[s test1];// 对象调用了我
return0;
}
//self的用法
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age;
}
- (void)setAge:(int)age;
- (int)age;
- (void)test;
@end
@implementation Person
- (void)setAge:(int)age
{
// _age = age;
self->_age = age;
}
- (int)age
{
returnself->_age;
}
- (void)test
{
// self:指向了方向调用者,代表着当期对象
int _age =20;
NSLog(@"Person的年龄是%d岁",self->_age);
}
@end
int main()
{
Person *p = [Person new];
[p setAge:10];
[p test];
return0;
}
总结:
要注意类方法的使用场合,self以后会经常用到,认真体会其中的含义.