在Objective-C中关于self和super功能用法的疑惑与分析-康大亮
来源:互联网 发布:文都医考app软件下载 编辑:程序博客网 时间:2024/05/17 21:56
也许你会感觉这个问题可能算不上问题,而且会感觉提出这样的问题的人也很low,可是,我就是这么low。
一、先讲self
首先,self关键字会在两个场合出现。
其次,根据出现场和的不同,self有着不同的表现,也就是作用。
1.当self出现在类方法中时,self代表调用该方法的类
2.当self出现在实例方法中时,self代表调用该方法的对象
总之,self总是代表当前方法的调用者!当这个方法被调用时,他所代表的对象随之被确定下来:谁在调用该方法,self就代表谁。
二、再讲super
首先,如果需要在子类方法中调用父类被覆盖的方法,则可以使用super关键字来调用父类被覆盖的方法。
其次,super的作用是用于限定该对象调用他从父类继承得到的属性或方法。
1.当在类方法中使用super调用父类的方法时,被调用的父类方法只能是类方法。
2.当在实例变量方法使用super调用父类的方法时,被调用的父类方法只能是实例方法。
代码示例如下:
.h文件
#import <Foundation/Foundation.h>
@interface Person :NSObject
{
NSString *_name;
NSString *_gender;
NSString *_hobby;
NSString *_address;
int _age;
}
//自定义初始化方法,给name和gender实例变量赋值
- (instancetype)initWithName: (NSString *)name
Gender: (NSString *)gender;
// 自定义初始化方法,给name和gender和age赋值
- (instancetype)initWithName:(NSString *)name Gender:(NSString *)gender Age:(int)age;
// 自定义初始化方法,给name和gender和hobby赋值
- (instancetype)initWithName: (NSString *)name Gender: (NSString *)gender Hobby: (NSString *)hobby;
// 自定义初始化方法,给name和gender和address赋值
- (instancetype)initWithName: (NSString *)name gender: (NSString *)gender address: (NSString *)address;
// getter
- (NSString *)name;
- (NSString *)gender;
- (NSString *)hobby;
- (NSString *)address;
- (int)age;
// 自定义description方法
- (NSString *) description;
@end
.m文件
#import "Person.h"
@implementation Person
#pragma mark -指定初始化方法
// 自定义初始化方法,给name和gender实例变量赋值方法的实现
- (instancetype)initWithName: (NSString *)name
Gender: (NSString *)gender{
self = [superinit];
if (self) {
_name = name;
_gender = gender;
}
return self;
}
// 给name和gender和age赋值方法的实现
- (instancetype)initWithName:(NSString *)name
Gender:(NSString *)gender
Age:(int)age{
self = [selfinitWithName: name Gender: gender ];
if (self) {
_age = age;
}
return self;
}
// 给name和gender和hobby赋值方法的实现
- (instancetype)initWithName: (NSString *)name
Gender: (NSString *)gender
Hobby: (NSString *)hobby{
self = [selfinitWithName:name Gender: gender ];
if (self) {
// _name = name;
// _gender = gender;
_hobby = hobby;
}
return self;
}
// 给name和gender和address赋值
- (instancetype)initWithName: (NSString *)name
gender: (NSString *)gender
address: (NSString *)address{
self = [selfinitWithName:name Gender: gender ];
if (self) {
// _name = name;
// _gender = gender;
_address = address;
}
return self;
}
// getter
- (NSString *)name{
return _name;
}
- (NSString *)gender{
return_gender;
}
- (NSString *)hobby{
return _hobby;
}
- (NSString *)address{
return_address;
}
- (int)age{
return _age;
}
// description方法是由系统提供的一种描述对象特征的一个实例方法,默认在打印一个对象时,会调用该方法,返回类名+对象地址。我们可以重写这个方法,将若干实例变量拼接为一个字符串返回,这样就可以打印我们想要的信息。
- (NSString *) description{
//使用字符串类,创建出一个字符串对象,然后使用格式初始化方法来将参数拼接进这个字符串对象
NSString *string = [[NSStringalloc] initWithFormat:@"嘿,你的名字是:%@,你的性别:%@,爱好: %@ ,地址:%@, 年龄:%d", _name,_gender, _hobby,_address,_age ];
return string;
}
@end
main.m文件
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc,const char * argv[]) {
Person *person1 = [[Personalloc]initWithName:@"陈冠希"Gender:@"公公"];
NSLog(@"name =%@ gender = %@",[person1name], [person1 gender]);
Person *person2 = [[Personalloc] initWithName:@"张柏芝"Gender:@"女"Age:30];
NSLog(@"%@", person2);
Person *person3 = [[Personalloc] initWithName:@"谢霆锋"Gender:@"男"Hobby:@"拍电影"];
NSLog(@"%@", person3);
Person *person4 = [[Personalloc] initWithName:@"张国荣"gender:@"男"address:@"香港"];
NSLog(@"%@", person4);
return 0;
}
结果:
- 在Objective-C中关于self和super功能用法的疑惑与分析-康大亮
- 关于 self 和 super 在oc 中 的疑惑 与 分析
- 关于 self 和 super 在oc 中 的疑惑 与 分析
- 关于 self 和 super 在oc 中 的疑惑 与 分析
- 关于 self 和 super 在oc 中 的疑惑 与 分析
- 关于 self 和 super 在oc 中 的疑惑 与 分析
- Objective-C 中关于self的用法
- Objective-C 中self 和 super
- Objective-C 中Self 和 Super 详解
- Objective-C 中Self 和 Super 详解
- Objective-C 中self 和 super
- Objective-C中Self和Super详解
- Objective-C 中Self 和 Super 详解
- Objective C 中self和super的区别
- Objective-C 的 self 和 super 详解
- Objective-C 的 self 和 super 详解
- Objective-C 的 self 和 super 详解
- Objective-C 的 self 和 super 详解
- iOS面试题
- framework层 自定义按键事件转换
- 第二期项目订房网错误分析
- 动态链接库(DLL)总结---解决名称粉碎问题(3)
- 小的时候.by小雷
- 在Objective-C中关于self和super功能用法的疑惑与分析-康大亮
- BitBlt
- Tomcat7 设置最大连接数
- iOS笔记UI--进度条
- C语言的谜题
- 用getAttribute获取控制层获取的数据,显示在jsp页面
- C#学习之路,学习笔记 第七章 面向对象编程:类和对象(一)
- u3d的摄像头:WebCamTexture
- Java线程死锁查看分析方法