OC语言(二)

一、对象

1、对象的存储

类创建对象,每个对象在内存中占据一定的存储空间,每个对象都有一份属于自己的单独的成员变量。所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份存储空间,类的方法存储于此。


每一个对象都包含一个 isa 指针,这个指针指向当前对象的所属的 类。

[p eat];表示给p所指向的对象发送一条eat消息,调用对象的eat方法,此时对象会顺着内部的 isa 指针找到存储于 类中的方法,执行。

isa 是对象中的隐藏指针,指向创建这个对象的类。


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

当使用一个类创建多个对象的时候,注意:

不同的对象在内存中分配的是不同的存储地址,所以各成员属性的地址也各不相同


1)[Person new]  的含义

>申请内存空间

>给实例变量初始化

>返回空间的首地址

1>那申请来的空间在内存的哪个区?

new  的时候申请的空间在内存的堆区(程序动态分配的内存空间)

当new的时候内存的布局是这么样的?

2>初始化的时候

如果实例变量是基本数据类型,此时给初始化为0

如果实例变量是OC字符串类型,此时给初始化为null


    3>实例变量保存在什么地方?

保存在 堆区

p(指针变量)存放在栈区

4>对象方法保存在什么地方

代码区

5>为什么使用[p run];就可以调用方法了?如何调用的

首先找p对应的堆区的空间,然后找到 _isa指针,再找到 _isa指向的代码区的空间,然后到该空间中找 方法


下面通过画图来分析 类和对象 的存储及调用情况



这表示当我们声明了类和实现了类并且定义了一个该类 的对象时,内存中的存储情况是这样的,因为没有给对象的实例变量赋值所以系统初始化的值都是空或者是0。

所以当我们调用一个方法时,比如:[p run];是怎么实现的?

当我们 Person *p=[Person new];的时候,会把申请的地址传给指针p,所以当我们调用[p run];的方法时,如图所示,会通过指针p来访问内存栈区的指针_isa,再通过指针_isa间接的访问内存代码区,从而可以访问到方法run。


6>一个类可以创建多个对象的情况

又创建一个对象p1

Person *p1=[Person new];



从这个分析图可以知道,无论你定义几个Person类的对象,代码区在内存中只存储一份


3、#pragma mark指令的使用

功能:简单来说就是对代码的分组,方便代码查找和导航用

它们告诉Xcode编译器,要在编译器窗口顶部的方法和函数弹出菜单中将代码分离开。一些类(尤其是一些控制器类)可能很长,方法和函数弹出菜单可以方便于代码导航。此时加入#pragma指令(#pragma是一个编译指令)对代码进行逻辑组织很有效果。


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

对象方法:

1>对象方法的实现只能在@implementation    ...  @end 中

对象方法的声明只能写在@interface  ....@end中间

2>对象方法都以 - 好开头,类方法都以 + 号开头

3>对象方法只能由对象来调用,类方法只能由类来调用,不能当做函数一样调用

4>函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end之间,但写在@interface...@end之间会无法识别,函数的声明可以再main函数内部也可以在main函数外部。

5>对象方法归类\对象所有


函数:

1>所有的函数都是平行的

2>函数不存在隶属关系

3>使用的时候可以直接调用

4>不可以访问对象的成员变量


5、常见错误

1>@interface ...@end 和 @implementation ...@end不能嵌套包含

2>只有类的声明没有类的实现,只有方法的实现

3>漏写了@end

4>两个类的对象声明顺序(可以把顺序打乱)

5>成员变量没有写在{}里

6>方法的声明写在了{}里

7>在声明时不能对类的成员变量进行初始化,请注意成员变量不能脱离对象而独立存在

8>方法无法像函数那样的调用

9>成员变量和方法不能用static等关键字修饰,不要和C语言混淆

10>类的实现可以写在main函数后面,在使用之前只要声明就可以


二、对象和方法之间的关系


1、对象作为方法的参数

主要演示

对象作为方法的参数

对象作为方法的返回值


程序代码如下

类 声明部分



方法实现部分


主函数部分


打印输出部分



总结:

无论是对象作为方法的参数还是返回值,都可以修改对象的变量



2、NSString类介绍及用法

NSString 是 Objective-C 中核心处理字符串的类之一


1)NSString 常见方法

1>创建常量字符串,注意使用" @ "符号

比如:NSString *str=@"This is a dog";


2>创建空字符串,给予赋值

比如:

因为NSString 是一个类

NSString *s1=[NSString new];

s1=@"asdf sdfg ddsf";


3>格式化创建字符串(按照指定的格式创建字符串)

格式:NSString *imgName = [NSString stringWithFormat:@"xxxxxx%02d.jpg",i];

例如:for(int i=0;i<10;i++)

{

NSString *imgName = [NSString stringWithFormat:@"xxxxxx%02d.jpg",i];

NSLog(@"%@",imgName);

}


4>用一个已经存在的字符串创建一个新的字符串

NSString *s2=[[NSString alloc] initWithString:s1];

NSLog(@"%@",s2);


3、NSString字符串长度计算方法

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


1)纯英文字符



打印如下



总结:

>可以看出一个字符占用一个字节

>用length计算出来的长度不包含‘\0’


2)中英文混合



打印如下



总结:

1>中英文字符都是占用一个字节

2>在C语言中,中文字符占3个字节


3)纯中文



打印如下:



总结:

1>中文在 OC中也占用一个字节












  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值