"一:无参数的方法的声明实现调用
"练习一
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.0x0是16进制的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>由于NULL是C语言的,如果不希望C语言的指针指向任何空间,就赋值为NULL
2>由于nil是OC语言的,如果不希望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;
}