黑马程序员---iOS基础---OC中类创建对象

本文介绍了Objective-C中创建对象的细节,包括对象在内存中的存储方式、isa指针的作用,以及如何使用类创建多个对象。同时,讨论了#pragma mark指令的使用、对象方法与函数的区别,并列举了编程中常见的错误。此外,还探讨了对象作为方法参数和返回值的情况,以及NSString类的常用方法。文章最后提到了OC多文件开发的实践和优势。
摘要由CSDN通过智能技术生成

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


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函数后面,在使用之前只要有声明就可以


6.对象和方法之间的关系


对象作为方法的参数:

@interface Person:NSObject{

int age;

NSString *name;

}

-(void)print:(Person *)p;

@end


@implementation

-(void)print:(Person *)p{

NSLog(@“年龄 = %d,姓名 = %@”,p->age,p->name);

}

@end


对象作为方法的返回值:

-(Person *)changeName:(Person *)p{

p->name = “asd”;

return p;

}

调用时:Person *p = 【Person new】;

【p  changeName:p】;


7.NSString常见方法


创建常量字符串: NSString * a = @“sdaf”;

创建空字符串,然后赋值: NSString *a = [NSString new]; a = @"asd";

格式化创建字符串;

使用NSLog是不能打印c中的字符串的

NSString字符串长度计算:

通过调用NSString类的对象方法 length 可以获得字符串的长度。

NSString *a = @“adf”;

NSLog(@“长度:%ld”, [a length]);

注意:
在C语言中,每个汉字占用3个字节,可以使用strlen计算。在OC中,length计算一个汉字长度为1。


8.OC多文件开发介绍


在工作中,通常把不同的类放到不同的文件中,每个类的声明和实现分开,声明写在.h头文件中,

实现写在相应的.m文件中去,类名是什么,文件名的前缀就是什么。

#import有两个作用:

一是和include一样,拷贝文件的内容;

二是可以自动防止文件内容的重复包含。

这也是编程思想的一种体现,可以说.h和.m文件时完全独立的,只是为了要求有较好的可读性,才要求两个文件的文件名一致,

这也是把接口和实现分离,让调用者不必去关心具体的实现细节。

Xcode是写一行编译一行,有简单的修复功能,红色是错误提示,黄色警告。

如果在程序中声明了一个变量,但是这个变量没有被使用也会产生警告信息。

在调试程序的时候,如果发现整个页面都没有报错,但是一运行就错误,那么一定是链接报错。

多文件开发的好处:提高代码的可读性。














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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值