//
// OC2总结.h
// 0805代码实践
//
// Created by apple on 15-8-5.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#ifndef _805_____OC2___h
#define _805_____OC2___h
#endif
***************************************************
1.对象的存储细节
[Person new] 做了三件事
1)
2)
3)
//1.申请的空间在内存的哪个区?
new的时候申请额空间在内存的堆区(程序动态分配的内存空间)
初始化的时候 如果实例变量是基本数据类型,此时给初始化为0
如果实例变量是OC字符串类型,此时初始化为null;
//2.实例变量保存在什么地方
堆区
per(指针变量) 存放在栈区
//3.对象方法保存的什么地方
代码区
//4.为什么使用【per run];就可以调用方法 了,如何调用
首先找
//5.一个类可以创建多个对象
***************************************************
#pragma mark
作用:给代码分组
补充 #warning 处理未完成的任务,方法
***************************************************
函数和对象方法的区别
对象方法:
-(void)run;
(1)对象方法的实现只能写在@implementation...@end中,对象方法的声明只能写在 @interface...@end中间
(2)对象方法都以-号开头,类方法都以+号开头
(3)对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用
(4)函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end中,但写在 @interface...@end会无法识别,函数的声明可以再main函数内部也可以在main函数外部。
(5)对象方法归类\对象所有
函数:
void run(){
}
(1)所有的函数都是平行的
(2)函数不存在隶属关系
(3)使用的时候可以直接调用
(4)不可以访问对象中的成员变量
***************************************************
常见的错误汇总
(1)@interface @end和@implementation @end不能嵌套包含 OC是弱语法,可以只有@implementation,但实际开发中千万不要这样。
(2)只有类的声明没有类的实现
(3)漏写@end
(4)两个类的对象声明顺序(可以把顺序打乱)
(5)成员变量没有写在{}里
(6)方法的声明写在了{}里面
(7)在声明时不能对类的成员变量进行初始化,请注意成员变量不能脱离对象而独立存在
(8)方法无法像函数那样的调用
(9)成员变量和方法不能用static等关键字修饰,不要和c语言混淆
(10)类的实现可以写在mian函数后面,在使用之前只要有声明就可以
经典错误
[car respondsToSelector:@selector(stop)]
***************************************************
对象和方法之间的关系
1.对象作为方法的参数
-(void)dispPerson:(Person *) person;
person *p1=[Person new];
[p dispPerson:p1]//对象作为方法的实参
2.对象作为方法的返回值
-(Person *)changeSex:(person *) person{
person->_sex=kSexWomen;
return person;
}
|
|