码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员---OC基础2【对象储存】【函数和方法的区别】【方法和对象关系】【对象作为方法参数】【NSString类介绍】

时间:2015-10-05 16:47:48      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:

 

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

【对象储存】

1、对象的储存细节

    [Car  new]

    new做了3件事

      1)向计算机申请存储空间

      2)给类中的每一个成员初始化值

      3)返回新申请的空间的首地址

      (1)、申请的空间在内存的哪个区?

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

      当new内存的布局:

     技术分享

        初始化的时候:

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

        如果是字符串类型此时初始化为null

    (2)、实例变量保存放在堆区

        对象名,指针变量存放在栈区

    (3)、对象方法保存在代码区

    (4)、用[p run];可以调用方法

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

    (5)、一个类可以创建多个对象,不同对象在内存中储存的地址不同

【函数和方法的区别】

 

1、区别

 

对象方法

 

1)对象方法的实现只能写在类的实现中,对象声明只能写在类中

 

2)对象方法以-开头,类方法以+开头

 

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

 

4)函数属于整个文件,可以在文件的任意位置写@interface@end中间,声明可以在main内部,也可以在main外部

 

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

 

函数

 

1)所有函数都是平行的

 

2)函数不存在隶属关系

 

3)函数中不能访问对象中的成员变量

 

 

2、常见错误

    1@interface@implementation都不能嵌套

 

    2、只有声明没有实现

 

    3、漏写@end

 

    4、两个类声明顺序可以打乱,但是要写,实现要写在声明之后

 

    5、成员变量要写在{}里面

 

    6、方法不能写在{}里面

 

    7、在声明的时候不能对成员变量进行初始化

 

    8、方法不能像函数一样调用

 

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

 

    10、类的实现可以写在main之后,但是声明要在前

 

    11、方法声明要实现,要不会警告

 

【方法和对象关系】

 

 1 1、对象作为方法的参数
 2 -(void)disPerson:(Person *)person{
 3     NSLog(@"姓名:%@ 性别:%d",person->_name,person->_sex);
 4 }
 5 
 6          Person *p = [Person new];
 7                 
 8                 Person *p1 = [Person new];
 9                 p1->_name = @"张三丰";
10                 p1->_sex = 1;
11                 Person *p2 = [Person new];
12                 p2->_name = @"sss";
13                 p2->_sex = 2;
14                 
15                 [p disPerson:p2];
16         
17 2、对象作为方法的返回值
18 
19 -(Person *)changeSex:(Person *)person{
20     person->_sex = kSexYao;
21     return person;
22 
23 }
24 
25       Person *p = [Person new];
26             
27             Person *p1 = [Person new];
28             p1->_name = @"张三丰";
29             p1->_sex = 1;
30             Person *p2 = [Person new];
31             p2->_name = @"sss";
32             p2->_sex = 0;
33             Person *p3 =  [p changeSex:p1];
34         [p disPerson:p3];

 

【对象作为方法参数】

  1 1、案例
  2     士兵开枪,枪射击子弹
  3     /*
  4         枪类
  5         名称:Gun
  6         属性:型号_size 子弹个数
  7         行为:射击
  8         
  9         人类
 10         名称:Soldier
 11         属性:姓名_name  等级_level
 12        行为:跑  蹲  开枪  跳
 13        每射击一次子弹要减一;
 14         
 15         子弹类
 16         名称:Bullet
 17         属性:子弹个数,型号
 18      
 19         士兵在射击时,不但要有枪,还要有弹夹
 20      */
 21     
 22     #import <Foundation/Foundation.h>
 23     
 24     
 25     子弹类
 26     @interface Bullet : NSObject
 27     {
 28         @public
 29         NSString *_size;
 30         int _bulletCount;
 31         
 32     }
 33     
 34     @end
 35     
 36     @implementation Bullet
 37     
 38     @end
 39     
 40     
 41     
 42     枪类
 43     @interface Gun : NSObject
 44     {
 45     @public
 46         NSString *_size;
 47         
 48     }
 49     -(void)shoot:(Bullet *)bullet;
 50     
 51     @end
 52     
 53     @implementation Gun
 54     
 55     -(void)shoot:(Bullet *)bullet{
 56         if (bullet->_bulletCount>0) {
 57             bullet->_bulletCount--;
 58             NSLog(@"%@正在射击突...,子弹剩余:%d",_size,bullet->_bulletCount);
 59             
 60         }else{
 61             NSLog(@"没有子弹了!");
 62         }
 63     }
 64     
 65     @end
 66     
 67     
 68     人类
 69     @interface Soldier : NSObject
 70     {
 71     @public
 72         NSString *_name;
 73         int _life;
 74         int _level;
 75         //    Gun *gun;
 76     }
 77     -(void)firing:(Gun *)gun and:(Bullet *)bullet;
 78     @end
 79     
 80     @implementation Soldier
 81     
 82     -(void)firing:(Gun *)gun and:(Bullet *)bullet{
 83         //让枪装上弹夹射击
 84         //子弹作为参数传递
 85         [gun shoot:bullet];
 86     }
 87     
 88     @end
 89     
 90     
 91     
 92     int main(int argc, const char * argv[]) {
 93         @autoreleasepool {
 94             //创建士兵
 95             Soldier *s = [Soldier new];
 96             s->_name = @"张三丰";
 97             s->_life = 99;
 98             s->_level = 3;
 99             //创建枪
100             Gun *g = [Gun new];
101             g->_size = @"AK47";
102             //创建子弹
103             Bullet *b = [Bullet new];
104             b->_bulletCount = 3;
105             //调用士兵开枪方法
106             [s firing:g and:b];
107             [s firing:g and:b];
108             [s firing:g and:b];
109             [s firing:g and:b];
110            
111         }
112         return 0;
113     }

NSString类介绍

 1 1、NSString常见方法    是object中核心处理字符串的类之一(%@打印对象)
 2     1)创建常量字符串,注意使用@符号
 3         NSString  *str = @"fdsfgsdgfs";
 4         
 5     2)创建空字符串,给于赋值
 6     
 7     //第一种创建字符串方法
 8             NSString *s = @"hhd";
 9             
10             //第二种,是一个类,可以创建对象调用
11             NSString *s1 = [NSString new];
12             s1 = @"dfsdfgsd";
13             
14             //第三种,格式化创建字符串
15             for (int i=0; i<10; i++) {
16                 NSString *im = [NSString stringWithFormat:@"xxx%02d.jpg",i];
17                 NSLog(@"%@",im);
18             }
19             //第四种,用一个已经存在的字符串创建一个新字符串,复制拷贝创建
20             NSString *s2 = [[NSString alloc] initWithString:s1];
21             NSLog(@"%@,%@,%@",s,s1,s2);
22     
23 2、NNString字符串长度的计算
24     1)纯英文字符:
25          NSString *s3 = @"hhffd";
26      //1)计算纯英文的字符串长度,typedef unsigned long NSUInteger;不包含\0
27          NSUInteger len = [s3 length];
28          NSLog(@"%ld",len);
29     //2)字符串纯中文,在OC中,中英文都是一个字符,长度都是一个字符,在C语言中一个汉字占用三个字节
30          NSString *s4 = @"张三丰";
31          len = [s4 length];
32          NSLog(@"%ld",len);
33     //3)中英文混合,都占一个字节
34          NSString *s5 = @"张三丰dfsd12!@";
35          len = [s5 length];
36  NSLog(@"%ld",len);

 

 

 

 

 

 

黑马程序员---OC基础2【对象储存】【函数和方法的区别】【方法和对象关系】【对象作为方法参数】【NSString类介绍】

标签:

原文地址:http://www.cnblogs.com/snowimba/p/4855811.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!