Objective-C---2---初始化、便利构造器
发布日期:2022-02-08 18:03:21 浏览次数:36 分类:技术文章

本文共 2372 字,大约阅读时间需要 7 分钟。

1. 继承

继承在OC中是单向

OC中只允许单继承和C++不一样

子类可以重写父类的方法

声明子类的setter和getter方法时,只要实现自己的成员变量即可,不用写父类的,父类的已经封装完成了,你直接调用就可以啦

基础知识补充:

NSInteger 包括:int long short

创建一个对象,对象放在堆区   栈区存放变量

Person *per1 = [[Person alloc] init];

 对象:[[Person alloc] init]

per1:是指针

[self 方法名];  //  self出现在对象方法中,则指当前的对象,如果出现在类方法中,则指当前类  NSLog(@"self = %@", [self class]);//  可以查看现在的对象所属的类是什么//  没有创建对象时,通过super关键字调用父类方法#pragma mark---------------------self这部分比较绕,可以仔细理解一下--------------//  self:是谁调用的就是谁所属的类:  以下是例子/*  声明一个Student和CollegeStudent类,CollegeStudent继承于Student类    在Student类中定义了一个sleep方法:
    CollegeStudent中没有重写sleep方法,只是单纯的继承
*/
- (void)sleep{
    NSLog(@"SLEEPING......");
NSLog(@"self = %@", [self class]);
}
/* CollegeStudent *p = [CollegeStudent new];
[p sleep];
在sleep中的self的值:
*/
NSLog(@"self = %@", [self class]);  //   ----------->中的self打印之后的结果:CollegeStudent//   因为是p调用的sleep,所以返回的是p的所属类,不是sleep所在的类Student

2. 初始化

 1.  之前使用的初始化方法:

- (id)init{    _name = @"李莫愁";    _sex = @"女";    return self;}//  也有这样写的初始化方法:- (id)init{    self = [super init];        _name = @"黄蓉";    return self;}- (id)init{  self = [super init];  //   调用父类的初始化方法,将继承下来的变量进行初始化    if (self != nil) {       //  初始化方法        _name = @"小龙女";        _sex = @"女";            }    return self;}

2. 完整的初始化方法:

- (id)init{    self = [super init];  //   调用父类的初始化方法,将继承下来的变量进行初始化    if (self) {        //  初始化设置        _name = @"灭绝师太";        _sex = @"女";            }    return self;   //  返回初始化完成的self}

 3.  self:如同指针

在动态方法中(-方法/对象方法):self代表对象

在静态方法中(+方法/类方法):self代表类

[super init]:发送消息,要调用父类初始化方法,然后返回给子类

- (id)initWithName:(NSString *)name               Sex:(NSString *)sex               Age:(NSInteger)age{    self = [super init];    if (self) {        _name = name;        _sex = sex;        _age = age;                //  下面两个NSLog打印出来的  只是测试一下        NSLog(@"%@", NSStringFromClass([self class]));        NSLog(@"%s",__FUNCTION__);    }    return self;}

打印的结果:

Person

-[Person initWithName:Sex:Age:]

id和instancetype用起来一样

 

3. 便利构造器:

+ (Person *)personWithName:(NSString *)name                       Age:(NSInteger)age                       Sex:(NSString *)sex{    // 便利构造器内部创建对象    //  便利构造器已经创建了对象,直接调用就可以了,不用再创建新的啦    Person *p = [[[Person alloc] initWithName:name Sex:sex Age:age] autorelease];    return p;}//  main函数中调用时:不用alloc或new创建Person *p = [Person personWithName:@"夏目" Age:16 Sex:@"男"];

 

   析构函数:

- (void)dealloc{[super dealloc];}

转载地址:https://blog.csdn.net/Evelynzn/article/details/48706493 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Objective-C---1---类的有关基本概念
下一篇:Objective-C---3---NSString的常用方法

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月02日 16时29分36秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~ 2019-04-21
gnome mysql client_解决MySQLWorkbenchgnome-keyring-daemon错误的方法分享 2019-04-21
java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决 2019-04-21
java多态替换switch_使多态性无法解决那些switch / case语句的麻烦 2019-04-21
java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条? 2019-04-21
下列不属于java语言特点的是_下列选项中,不属于Java语言特点的一项是( )。... 2019-04-21
java中小数的乘法_javascript的小数点乘法除法实例 2019-04-21
kappa一致性检验教程_SPSS在线_SPSSAU_Kappa一致性检验 2019-04-21
linux shell mysql备份_linux shell 备份mysql 数据库 2019-04-21
Java双向链表时间复杂度_链表是什么?有多少种链表?时间复杂度是? 2019-04-21
unity3d能和java系统整合吗_Android与Unity3d的整合 2019-04-21
minecraft666java_我的世界的666的世界 2019-04-21
辽宁师范大学java_辽宁师范大学心理学院 2019-04-21
java程序有连接数据库_Java程序连接数据库 2019-04-21
java reduce.mdn_reduce高级用法 2019-04-21
java shape用法_Java PShape.scale方法代码示例 2019-04-21
java字符串三目_java字符串连接运算符和三目运算符 2021-06-24
java 堆内存 非堆内存_JVM 堆内存和非堆内存 2021-06-24
Java新手写什么demo_通过入门demo简单了解netty使用方法 2021-06-24
java国际化bundle_java语言国际化--ResouceBundle、struts 2021-06-24