Objective-C第二章类与对象二


你好!我是小柒,今天咱们来学习一下自定义初始化,便利构造器,设置器与访问器。

类与对象二

本节内容:

1、self和super关键字

2、自定义初始化

3、便利构造器

4、自定义初始化与便利构造器连用

5、设置器于访问器

一、self和super关键字

1、self是类对象本身,用来调用本类对象方法。

2、super是父类对象本身,用来调用从父类继承下来的方法。

二、自定义初始化

小柒什么是自定义初始化?

答:自定义初始化:在初始化的同时给成员变量赋值。

讲解:

//Student.h声明文件

#import <Foundation/Foundation.h>

@interface Student : NSObject

{

// 成员变量

NSString *name;

}

//自定义初始化方法声明

//-(类名 *)initWith成员变量名:(类型)参数名;

-(Student *)initWithName:(NSString *)newName;

-(void)sayHi;

@end

// Student.m实现文件

#import "Student.h"

@implementation Student

//自定义初始化方法实现

//-(类名 *)initWith成员变量名:(类型)参数名;

-(Student *)initWithName:(NSString *)newName

{

// 通过super父类调用init初始化方法,产生一个对象,self就是这个类的对象

// self对象本身 = [super父类本身 init初始化];

self = [super init];

// 判断是否初始化成功,未初始化之前,self = nil

if (self) {

// 给成员变量赋值

// 成员变量 = 参数名;

name = newName;

}

// 将初始化后的对象返回self;

return self;

}

//描述方法description

//-实例方法(NSString *)方法名

- (NSString *)description

{

// 返回一个成员变量

return name;

}

-(void)sayHi

{

NSLog(@"叫我:%@就行",name);

}

@end

// main.m调用

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

// 自定义初始化方法调用

// 类名 *stu = [[类名 alloc] initWith成员变量名:值];

Student *stu = [[Student alloc] initWithName:@"齐哥"];

// 当我们打印一个对象时,默认调用其描述方法

NSLog(@"stu = %@",stu);

[stu sayHi];

}

return 0;

}

打印结果:

2015-12-29 14:03:04.258 Task[5598:118021] stu = 齐哥

2015-12-29 14:03:04.259 Task[5598:118021] 叫我:齐哥就行

小柒提示:自定义初始化格式一定要背下来,init小写With首字母大写,成员变量名首字母大写,参数名驼峰法。

3、便利构造器

小柒什么是便利构造器?

答: 通过类方式实现对象的初始化以及成员变量的赋值。

//Student.h生明文件

#import <Foundation/Foundation.h>

@interface Student : NSObject

{

// 成员变量

// 姓名

NSString *name;

}

//便利构造器方法声明

//+(类名 *)类名小写With成员变量名:(类型)参数名;

+(Student *)studentWithName:(NSString *)newName;

@end

// Student.m实现

#import "Student.h"

@implementation Student

//便利构造器方法实现

//+(类名 *)类名小写With成员变量名:(类型)参数名;

+(Student *)studentWithName:(NSString *)newName

{

// 创建对象

Student *stu = [[Student alloc] init];

// 赋值

stu ->name = newName;

NSLog(@"stu ->name = %@",stu ->name);

// 返回对象

return stu;

}

//描述方法

-(NSString *)description

{

return name;

}

@end

// main.m调用

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Student *stu = [Student studentWithName:@"齐哥"];

// 描述对象

NSLog(@"stu = %@",stu);

}

return 0;

}

打印结果:

2015-12-29 16:52:58.571 Task2[1558:26150] stu ->name = 齐哥

2015-12-29 16:52:58.572 Task2[1558:26150] stu = 齐哥

小柒提示:便利构造器格式一定要背下来,类名小写With首字母大写,成员变量名首字母大写,参数名驼峰法。

四、自定义初始化与便利构造器连用

// Student.h声明

#import <Foundation/Foundation.h>

@interface Student : NSObject

{

// 成员变量

NSString *name;

int age;

}

//自定义初始化方法声明

//-(类名 *)initWith成员变量名:(类型)参数名 and成员变量名:(类型)参数名;

-(Student *)initWithName:(NSString *)newName andAge:(int)newAge;

//+(类名 *)类名With成员变量名:(类型)参数名 and成员变量名:(类型)参数名;

+(Student *)studentWithName:(NSString *)newName andAge:(int)newAge;

-(void)play;

@end

// Student.m实现

#import "Student.h"

@implementation Student

//自定义方法实现

-(Student *)initWithName:(NSString *)newName andAge:(int)newAge

{

self = [super init];

if (self) {

name = newName;

age = newAge;

}

return self;

}

//便利构造器方法实现

+(Student *)studentWithName:(NSString *)newName andAge:(int)newAge

{

// 类名 *对象名 = [[类名 alloc] initnitWithName:参数名 andAge:参数名];

Student *stu = [[Student alloc] initWithName:newName andAge:newAge];

// 返回对象

return stu;

}

-(void)play

{

NSLog(@"叫我%@,哥今年%d",name,age);

}

@end

// main.m调用

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Student *stu = [[Student alloc] initWithName:@"齐哥" andAge:10];

[stu play];

Student *stu2 = [[Student alloc] initWithName:@"老三" andAge:9];

// 调用

[stu2 play];

}

return 0;

}

打印结果:

2015-12-29 16:58:26.712 Task3[1668:29371] 叫我齐哥,哥今年10

2015-12-29 16:58:26.714 Task3[1668:29371] 叫我老三,哥今年9

5、设置器与访问器

小柒什么是设置器?什么是访问器?

答:设置器全称setter,设置、修改对象中某个成员变量的值。

答:访问器全称getter访问对象中某个成员变量的值。

且setter,getter是成对出现。

//Student.h声明文件

#import <Foundation/Foundation.h>

@interface Student : NSObject

{

// 成员变量

NSString *name;

int age;

}

//设置器方法声明

//-方法类型(返回类型)set成员变量名:(类型)参数名;

-(void)setName:(NSString *)newName;

//-方法类型(类型)参数名;

-(NSString *)Newname;

-(void)setAge:(int)newAge;

-(int)newAge;

//

-(void)play;

@end

//Student.m实现文件

#import "Student.h"

@implementation Student

//设置器方法实现

//-方法类型(返回类型)set成员变量名:(类型)参数名

-(void)setName:(NSString *)newName

{

// 赋值

name = newName;

}

-(NSString *)Newname

{

// 返回成员变量

return name;

}

-(void)setAge:(int)newAge

{

age = newAge;

}

-(int)newAge

{

return age;

}

-(void)play

{

NSLog(@"我是住在你隔壁的%@,我才%d,请你放心!",name,age);

}

@end

// main.m调用

#import <Foundation/Foundation.h>

#import "Student.h"

int main(int argc, const char * argv[]) {

@autoreleasepool {

Student *stu = [[Student alloc] init];

// [对象 set成员变量名:];

[stu setName:@"老王"];

// [stu setAge:30];等效于stu.age = 30;

// 点语法

// 对象.成员变量 ;

stu.age = 30;

[stu play];

}

return 0;

}

打印结果:

2015-12-29 19:18:27.579 Task4[2612:58816] 我是住在你隔壁的老王,我才30,请你放心!

小柒提示:点语法只能调用set和get方法。

哎呀!今天的课程又讲完了,大家好好敲代码,记得预习封装和继承,小柒也觉觉了,拜拜。加油哦!

优质内容筛选与推荐>>
1、tar 命令使用详解
2、解答数独
3、NDK开发之Application.mk文件详解
4、密码强度应用(js)
5、微软四十周年 Microsoft’s 40th anniversary


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号