一、关于objective-c中的self的使用方法
1、用法:
1>.self就是个指针,指向了方法调用者,就是说谁调用它,他就指向谁!
2>.我们可以通过利用 “self->成员变量名” 这种形式来访问当前对象内部的成员变量!
3>我们也可以使用 [self, 方法名]; 这种方式来调用对象方法或者类方法!
2 、示例:
self的具体用法,我们来看一段代码,通过代码来进一步学习:
1>“self->成员变量名”
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
int _age; //Person类中的唯一成员变量_age.
}
- (void)setAge:(int)age;
- (int)age;
- (void)test;
@end
@implementation Person
- (void)setAge:(int)age
{
// _age = age;
self->_age = age; // 我们可以通过利用 “self->成员变量名” 这种形式来访问当前对象内部的成员变量!
}
- (int)age
{
return self->_age; // 我们可以通过利用 “self->成员变量名” 这种形式来访问当前对象内部的成员变量!
}
- (void)test
{
int _age = 20;
NSLog(@"Person的年龄是%d岁", self->_age); // 想在test函数中输出成员变量的值,而不是该函数中的_age,所以我们只好用self->age来实现
}
@end
int main()
{
Person *p = [Person new];
[p setAge:10];
[p test];
return 0;
}
2>[self, 方法名] 对象方法;
#import <Foundation/Foundation.h>
@interface Dog : NSObject //定义一个Dog类,声明两个方法,bark和run.
- (void)bark;
- (void)run;
@end
@implementation Dog
- (void)bark
{
NSLog(@"汪汪汪"); // bark方法的实现
}
- (void)run
{
[self bark]; // run方法的实现
//NSLog(@"汪汪汪"); // 如果想在输出“跑跑跑”之前,先输出“汪汪汪”,我们可以拷贝一份“汪汪汪”来输出,但是如果使用
NSLog(@"跑跑跑"); self就更简便,直接[self bark] 调用对象方法,更加快捷。
}
@end
int main()
{
Dog *d = [Dog new];
[d run];
return 0;
}
3>[self, 方法名] 类方法;
/*
设计一个计算器类
* 求和
* 求平均值
*/
#import <Foundation/Foundation.h>
@interface JiSusnQi : NSObject // 工具类:基本没有任何成员变量,里面的方法基本都是类方法
+ (int)sumOfNum1:(int)num1 andNum2:(int)num2; // +开头,声明类方法
+ (int)averageOfNum1:(int)num1 andNum2:(int)num2;
@end
@implementation JiSusnQi
+ (int)sumOfNum1:(int)num1 andNum2:(int)num2 // 类方法的实现
{
return num1 + num2;
}
+ (int)averageOfNum1:(int)num1 andNum2:(int)num2
{
int sum = [self sumOfNum1:num1 andNum2:num2]; // 这个时候,我们求平均之前,一定要先取得总和的值,可以直接用类进行
return sum / 2; 调用方法[jisuanqi sumOfNum1:num1 andNum2:num2]; 也可以直接用
} [self sumOfNum1:num1 andNum2:num2]; 来调用类方法。
@end
int main()
{
int a = [JiSusnQi averageOfNum1:10 andNum2:12];
NSLog(@"a=%d", a);
// JiSusnQi *jsq = [JiSusnQi new];
//
//
// [jsq sumOfNum1:10 andNum2:13];
return 0;
}