Objective-C语言中的方法的参数,声明-实现-调用,类加载


":无参数的方法的声明实现调用


"练习一

1.创建一个学生类,为学生类添加一个做作业的方法

1>指出方法名  doHomeWork

2>调用这个方法.

2.给学生类添加一个听音乐的方法

1>指出方法名

2>调用这个方法. listenMusic


@interface Student : NSObject

{

@public

    //姓名

    NSString * _name;

}


//做作业

- (void)doHomeWork:


//听音乐

- (void)listenMusic;


@end


@implementation Student

- (void)doHomeWork

{

   NSLog(@"我在做作业!");

}


- (void)listenMusic

{

    NSLog(@"我在听 世界末日!");

}

@end


int main()

{

    Student *xiaoming = [Student new];

    [xiaoming doHomeWork];

    [xiaoming listenMusic];


    return 0;

}



"练习二

1.在上次练习的基础上,给做作业的方法添加一个参数,这个参数用NSString类型的,表示要做作业的学科名,在方法内部打印这个传递进来的学科名.

1>指出方法名 doHomeWork:

2>调用方法


2.在上次练习的基础上,给听歌的方法添加一个参数,这个参数用NSString类型的,表示要听的歌曲的名字,在方法内部打印这个传递进来的歌曲名.

1>指出方法名 listenMusic:

2>调用方法

@interface Student : NSObject

{

@public

    //    姓名

    NSString * _name;

}

//做作业

- (void)doHomeWork:(NSString *)bookName;


//听音乐

- (void)listenMusic:(NSString *)songName;

@end


@implementation Student


- (void)doHomeWork:(NSString *)bookName

{

    NSLog(@"我在做%@作业!",bookName);

}


- (void)listenMusic:(NSString *)songName

{

    NSLog(@"我在听 %@!",songName);

}

@end


int main()

{

    Student *xiaoming = [Student new];

    [xiaoming doHomeWork:@"OC基础02"];

    [xiaoming listenMusic:@"世界未末日"];

    

    return 0;

}



":带多个参数的方法的声明实现调用


"练习

在上次练习的基础上,把做作业的方法和听歌的方法合并成一个方法


@interface Student : NSObject

{

@public

    //姓名

    NSString * _name;

}


//做作业

- (void)doHomeWork:(NSString *)bookName :(NSString *)songName;


@end


@implementation Student


- (void)doHomeWork:(NSString *)bookName :(NSString *)songName

{

    NSLog(@"我在做%@作业!",bookName);

    NSLog(@"我在听 %@!",songName);

}


@end



int main()

{

    Student *xiaoming = [Student new];

    [xiaoming doHomeWork:@"语文" :@"天上掉下个猪八戒"];

    

    return 0;

}



":方法的命名规范


"练习

在上一次练习的基础之上,按照规范把做作业方法和音乐方法进行命名,指出按照规范名之后的做作业方法和听音乐方法的方法名


doHomeWorkWithBookName: andSongName:



@interface Student : NSObject

{

@public

    //    姓名

    NSString * _name;

}

//做作业

//- (void)doHomeWork:(NSString *)bookName :(NSString *)songName;

-(void)doHomeWorkWithBookName:(NSString *)bookName andSongName:(NSString *)songName;


@end


@implementation Student


-(void)doHomeWorkWithBookName:(NSString *)bookName andSongName:(NSString *)songName

{

    NSLog(@"我在做%@作业!",bookName);

    NSLog(@"我在听 %@!",songName);

}


@end


int main()

{

    Student *xiaoming = [Student new];

    [xiaoming doHomeWorkWithBookName:@"语文" andSongName:@"123"];

    

    return 0;

}


":1个类的多个对象之间毫无关系 [掌握]



"复习

1. 类是对具有相同特征和共同行为的一类事物的总称


2.类是模板类是图纸,对象就是通过模板/图纸创建出来的可以确定的一个实体



"练习

创建一个手机类

属性

设备的唯一标识: NSString * _UUID

颜色 NSString * _color

存储空间 int _space

方法

根据传入的号码拨打电话

闹钟叫


@interface IPhone : NSObject

{

@public

    //设备的唯一标识:

    NSString * _UUID;

    //颜色

    NSString * _color;

    //存储空间

    int _space;

    

}


//传入的号码拨打电话

- (void)callWithPhoneNum:(int)num;


//闹钟叫

- (void)alarming;


@end


@implementation IPhone


//传入的号码拨打电话

- (void)callWithPhoneNum:(int)num

{

    NSLog(@"%d的号码已经拨通",num);

}


//闹钟叫

- (void)alarming

{

    NSLog(@"闹钟叫了");

}


@end


1.一个类可以创建多个不同的对象.


2.同一个类创建的多个对象,每个对象都有自己独立的属性,不同对象的属性之间毫无关系.


3.不同对象的值毫无关系,在类的外部访问属性,一定告诉编译器,访问的是哪个兑现个想.


4.方法内可以直接访问属性,方法内访问的是当前调用这个方法的对象的属性.


5.同一个类创建的多个对象没有关系,方法中访问的属性,对当前调用方法的对象起作用,谁调用方法,方法内部访问的属性就是谁的.


":类加载


"强调

类的代码会在类第一次被访问的时候加载到内存,并存储到代码区,且只加载一次,只有在第一次被访问的时候.




1> 对象在内存中的存储


@interface IPhone : NSObject

{

@public

    NSString *_UUID;

    NSString *_color;

    int _space;

}

-(void)callWithPhoneNum:(int)num;

-(void)alarming;


@end


@implementation IPhone

-(void)callWithPhoneNum:(int)num

{

    NSLog(@"已经拨通了电话%d",num);

}

-(void)alarming

{

    NSLog(@"闹钟响了");

}

@end



分析下面代码的运行的全过程:

int main()

{

    //要使用Iphone这个类,把这个类的代码加载到代码区.

    //在栈区定义一个局部指针变量(IPhone类型) 占据8个字节

    IPhone *6spluse;

    

    //1>在堆区开辟空间,存储对象,把类中的属性在这个空间中声明成变量

    //2>声明一个isa指针指向代码区的类

    //3>OC的指针设置为nil,基本数据类型设置为0,c指针设置为NULL

    //4>返回这个对象在堆区的地址 用指针变量来接收

    6spluse = [IPhone new];

    return 0;

}


2> 对象在内存中的存储的细节


"问题

为什么对象中不存储方法,只存储属性?


1.不同的对象内部的属性的值各不相同.

2.不同的对象要调用的方法的内容都是相同的.

3.所以对象内部只有这个对象的属性,没有方法,这样做可以节省内存.



3> nil [掌握]


1.0x016进制的0,等价于10进制的0,这表示一个地址,这个地址表示不指向任何空间(地址是0X0的空间被保护了).



2.C语言中的NULL

1,是一个地址,这个地址就0x0,表示不指向任何空间.

#define NULL ((void*)0)



"nil

1.OC中表示地址为0的这个地址,完全等价于NULL.



2.nil的底层

#define nil  __DARWIN_NULL

#define __DARWIN_NULL ((void *)0)//NULLL完全等价



3.建议

1>由于NULLC语言的,如果不希望C语言的指针指向任何空间,就赋值为NULL

2>由于nilOC语言的,如果不希望OC中的指向对象的指针指向任何空间,就赋值为nil

3>心里一定清楚 nil完全等价于NULL



4.注意点

1>如果一个指向OC对象的指针被赋值为nil,表示这个指针不指向任何对象,此时如果通过这个指针访问属性,编译不报错,运行崩溃!

2>如果一个指向OC对象的指针被赋值为nil,表示这个指针不指向任何对象,此时如果通过这个指针调用方法,没有任何反应

@interface IPhone : NSObject

{

@public

    NSString *_UUID;

    NSString *_color;

    int _space;

}

-(void)callWithPhoneNum:(int)num;

-(void)alarming;


@end

@implementation IPhone

-(void)callWithPhoneNum:(int)num

{

    NSLog(@"已经拨通了电话%d",num);

}

-(void)alarming

{

    NSLog(@"闹钟响了");

}

@end


int main()

{

    IPhone *phone = nil;

    //编译没有问题 运行崩溃

    phone->_UUID= @"123";

    //编译没有问题 运行没有反应

    [phone alarming];

    

    return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值