A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我的呸 中级黑马   /  2015-8-1 13:52  /  576 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.对象的存储细节

类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成员变量,所有的对象公用类的成员方法,
方法在整个内存中只有一份,类本身在内存中占据一份存储空间,类的方法存储于此。
每一个对象都包含一个isa指针.这个指针指向当前对象所属的类。
isa是对象中的隐藏指针,指向创建这个对象的类。
在OC中存在一个名为id的类型,这个和上面所说这个isa指针有一定的联系。
对象在内存中都是由其地址唯一标识的,所有的对象都是id类型的。

2.使用一个类创建多个对象

假定有个Car类:
Car * car1 = [Car new];
Car * car2 = [Car new];
当使用一个类创建多个对象的时候需要注意的是:
不同的对象在内存中分配的是不同的存储地址,所以各成员属性的地址也各不相同。

3.#pragma mark 指令的应用

指令可以让代码分组,便于查找。
#pragma mark 分组标识名
#pragma mark -
注意 - 之后不能有空格
如果你的标志没有出现在弹出菜单中,比如没有分隔线出现,
请在Xcode菜单 “Preferences..”  中的 “Code Sense”  选项取消选中  ”Sort list alphabetically”。

4.函数和对象方法的区别

对象方法:
(1)对象方法的声明只能写在@interface...@end中间,对象方法的实现只能写在@implementation...@end中;
(2)对象方法都以-号开头,类方法都以+号开头
(3)对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用
(4)函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end中,
但写在@interface...@end会无法识别,函数的声明可以再main函数内部也可以在main函数外部。
(5)对象方法归类\对象所有
函数:
(1)所有的函数都是平行的,所以猴子不喜欢,呵呵
(2)函数不存在隶属关系
(3)使用的时候可以直接调用
(4)不可以访问对象中的成员变量

5.常见的错误
(1)@interface @end和@implementation @end不能嵌套包含。OC是弱语法,可以只有@implementation,但实际开发中千万不要这样。
至于什么是弱语法,查了一下,也没看到什么定义,大概可以理解为OC中的语法有些时候你没写完整编译也可以过,但是运行时就会有问题,
比如闪退,所以要严格的遵循语法要求去写。
(2)只有类的声明没有类的实现
只有@interface没有@implementation时,程序编译能够通过,但是执行报错。
(3)漏写@end
(4)两个类的对象声明顺序(可以把顺序打乱)
(5)成员变量没有写在{}里
(6)方法的声明写在了{}里面
(7)在声明时不能对类的成员变量进行初始化,请注意成员变量不能脱离对象而独立存在
(8)方法无法像函数那样的调用
(9)成员变量和方法不能用static等关键字修饰,不要和c语言混淆
(10)类的实现可以写在mian函数后面,在使用之前只要有声明就可以

1 个回复

倒序浏览
谢谢楼主分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马