【OC语言】第二篇·对象的作用、字符串类型以及多文件开发
2015-08-17 08:08
639 查看
一、对象的存储
1、Person *p = [Person new] 对Person类实例化的时候做了三件事
1)申请内存空间
2)给实例变量初始化
3)返回空间首地址
注意:
1)用new 的时候申请的的空间在内存的堆区(程序动态分配的内存空间)。并且在堆区对类的成员变量进行初始化,整型,实型初始化为0,字符串初始化为null。
2)实例变量[Person new] 存放在堆区,指针变量存放在栈区。
3)对象方法存放在代码区
4)使用[p run];调用方法:首先找p对应的堆区空间,然后找到_isa指针(在堆区实例变量首地址位置),再找到_isa指向的代码区空间,然后到该空间中找方法。
2、不同的对象在内存中分配的是不同的存储地址,所以各成员属性的地址(在堆区)也各不相同。
![](http://img.blog.csdn.net/20150817083552595)
二、#pragma mark预处理指令的使用
1. 功能:简单来说就是对代码的分组,方便代码的查找和导航
2. 用法一:分隔线 #pragma mark -
3. 用法二:分组标识 #pragma mark 分组(标识)名称
三、关于结构体变量的赋值
1.错误方法
错误原因:因为定义数组的时候也会用到{数据项}这种赋值方法,编译器不知道是给结构体还是数组赋值,所以会报错,只要加一个强制转换会解决。
2. 正确方法:
1)解决办法一:
2)解决办法二:
3)解决办法三:逐个赋值
四、NSString类介绍及使用
1.NSString是OC中核心处理字符串类之一。
2. 常见用法:
1)创建常量字符串,注意用“@”
(1) NSString *str = @"This is a OC String";
(2)NSString *s1 = [NSString new];
s1=@"This is a string";
(3)格式化创建字符串
NSString *imgName = [NSString stringWithFormat:@"xxxxxxx%02d.jpg",i];
(4)NSString *s2 = [[NSString alloc] initWithString:s1];
2)输出一个字符串
NSLog(@);
3. NSString 字符串长度计算
int len = [s1 length];
注意:OC当中中英文都占用1个字节,符号也1个字节。
C中:英文1个字节,中文3个字节,符号一个字节。
五、OC的多文件开发
1. 在工作当中,通常把不同的类,放到不同的文件中,每个类的声明和实现分开。声明在.h头文件中,实现在.m文件当中,类名是什么,文件名的前缀就是什么。
2. 注意:
1).h和.m文件要同名
2)文件名就是类名,一看文件就知道文件是哪个类
3. 多文件开发的实现:
1)自己创建.h和.m文件
2)创建一个Cocoa的类文件
六、对象作为方法的参数连续传递示例程序
1、Person *p = [Person new] 对Person类实例化的时候做了三件事
1)申请内存空间
2)给实例变量初始化
3)返回空间首地址
注意:
1)用new 的时候申请的的空间在内存的堆区(程序动态分配的内存空间)。并且在堆区对类的成员变量进行初始化,整型,实型初始化为0,字符串初始化为null。
2)实例变量[Person new] 存放在堆区,指针变量存放在栈区。
3)对象方法存放在代码区
4)使用[p run];调用方法:首先找p对应的堆区空间,然后找到_isa指针(在堆区实例变量首地址位置),再找到_isa指向的代码区空间,然后到该空间中找方法。
2、不同的对象在内存中分配的是不同的存储地址,所以各成员属性的地址(在堆区)也各不相同。
二、#pragma mark预处理指令的使用
1. 功能:简单来说就是对代码的分组,方便代码的查找和导航
2. 用法一:分隔线 #pragma mark -
3. 用法二:分组标识 #pragma mark 分组(标识)名称
三、关于结构体变量的赋值
1.错误方法
typedef struct date{ int year; int month; int day; } Mydate; Mydate date1; date1 = {1988,12,12};
错误原因:因为定义数组的时候也会用到{数据项}这种赋值方法,编译器不知道是给结构体还是数组赋值,所以会报错,只要加一个强制转换会解决。
2. 正确方法:
1)解决办法一:
Mydate date2; date2 = (Mydate){1999,2,3};
2)解决办法二:
Mydate date3; Mydate date4 = {1987,2,15}; date3 = date4;
3)解决办法三:逐个赋值
四、NSString类介绍及使用
1.NSString是OC中核心处理字符串类之一。
2. 常见用法:
1)创建常量字符串,注意用“@”
(1) NSString *str = @"This is a OC String";
(2)NSString *s1 = [NSString new];
s1=@"This is a string";
(3)格式化创建字符串
NSString *imgName = [NSString stringWithFormat:@"xxxxxxx%02d.jpg",i];
(4)NSString *s2 = [[NSString alloc] initWithString:s1];
2)输出一个字符串
NSLog(@);
3. NSString 字符串长度计算
int len = [s1 length];
注意:OC当中中英文都占用1个字节,符号也1个字节。
C中:英文1个字节,中文3个字节,符号一个字节。
五、OC的多文件开发
1. 在工作当中,通常把不同的类,放到不同的文件中,每个类的声明和实现分开。声明在.h头文件中,实现在.m文件当中,类名是什么,文件名的前缀就是什么。
2. 注意:
1).h和.m文件要同名
2)文件名就是类名,一看文件就知道文件是哪个类
3. 多文件开发的实现:
1)自己创建.h和.m文件
2)创建一个Cocoa的类文件
六、对象作为方法的参数连续传递示例程序
#import <Foundation/Foundation.h> #pragma mark Bullet子弹类的声明 @interface Bullet:NSObject { @public int _bulletNum; NSString *_size; } //行为声明 -(void) addBullet:(int)num; @end #pragma mark - #pragma mark Bullet类的实现 @implementation Bullet -(void) addBullet:(int)num{ _bulletNum += num; NSLog(@"目前有:%d个子弹",_bulletNum); } @end #pragma mark - #pragma mark Gun类的声明 @interface Gun:NSObject { @public NSString *_size; //抢的型号 } //行为声明 -(void)shoot:(Bullet *)bullet; @end #pragma mark - #pragma mark Gun类的实现 @implementation Gun //方法的实现 -(void) shoot:(Bullet *)bullet { if(bullet -> _bulletNum <= 0) NSLog(@"咔咔,%@没子弹了!",_size); else{ NSLog(@"啪啪啪啪"); bullet -> _bulletNum --; } } @end #pragma mark - #pragma mark Soldier类的声明 typedef enum {kLevelA,kLevelB,kLevelC}sLevel; @interface Soldier:NSObject //成员声明 { @public NSString *_name; int _life; sLevel _level; } //方法的声明 -(void) fireByGun:(Gun *)gun and:(Bullet *)bullte and:(int)count; //射击 -(void) addBullet:(Bullet *)bullet and:(int)num; //添加子弹 @end #pragma mark - #pragma mark Soldier类的实现 @implementation Soldier //方法的实现 -(void) fireByGun:(Gun *)gun and:(Bullet *)bullte and:(int)count { for(int i=0;i<count;i++) { [gun shoot:bullte]; } } -(void) addBullet:(Bullet *)bullet and:(int)num { [bullet addBullet:num]; NSLog(@"装弹完毕!"); } @end int main(int argc, const char * argv[]) { @autoreleasepool { Bullet *bullet = [Bullet new]; bullet -> _size =@"5MM"; bullet -> _bulletNum = 3; Gun *gun = [Gun new]; gun -> _size = @"连发步枪M16"; Soldier *s1 = [Soldier new]; s1 ->_name = @"Wang Baoqiang"; s1 -> _level = kLevelA; s1 -> _life = 100; [s1 fireByGun:gun and:bullet and:5]; [s1 addBullet:bullet and:6]; } return 0; }
相关文章推荐
- 【OC语言】第三篇·类方法的使用、匿名类以及封装
- 【OC语言】第四篇·类的继承、多态、类对象以及SEL类型
- 【OC语言】第五篇·@property和@synthesize关键字、动态类型检测和构造方法
- 【OC语言】第六篇·内存管理
- 【OC语言】第七篇·ARC和分类
- 【OC语言】第八天·block和Protocol
- 【OC语言】第九篇·NSString,NSArry,NSDictionary
- 【OC语言】第十篇·NSFileManager、NSDate、沙盒、copy以及单例模式
- 【C语言】第一篇·C语言概述和数据类型
- 【C语言】第二篇·输入输出和运算符
- C语言中的字符串
- C语言各种关键字
- C++容器vector的调用
- 使用正则表达式解析一般sql语句(C++)
- C语言中的dirent.h说明
- poj3984广搜c语言
- 关于 c#调用c++ 出现异常System.StackOverflowException 的问题
- C,C++宏中#与##的讲解
- C语言基础学习——第2天(语句)
- Vanya and Books