黑马程序员-[OC语言] 第一篇:类、对象的基本概述

来源:互联网 发布:aftereffects软件下载 编辑:程序博客网 时间:2024/05/16 16:47

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

OC基础--第一天课程总结:

1. 引入头文件的的方式:
#include <stdio.h>   ,include 他是使用预处理器防止重复包含;如果没有写预处理指令,则无法防止重复包含;
#import<Foundation/Foundation>; 使用import 可以防止重复包含;


2.  NSlog 和printf函数的区别:
    1)NSlog   会自动换行   而printf不会自动换行。
    2) NSlog   会自动输出时间等项目信息,printf不会输出自动换行的调试信息,
    3) NSlog   函数参数是一个NSString 对象,而printf 是一个字符串常量指针;

3.  OC中有自己特有的字符串表示方法
        1)  用%@输出字符串,NSString  C语言是不支持的。
         2)  @“”   这个符号表示将C的字符串转化为OC中的字符串对象NSString.
         3)   @标识符   OC中大部分的关键字都是以@开头的。


4.   OC 与C 语言的差异:
      1).C语言中,主要有  .c   .o   .out   .h   文件,而OC语言中主要有:.h 头文件    .c  C语言源文件   .m    OC  语言源文件。
      2).OC于C数据类型差异问题:


      
  5. 类的声明和实现:
   1)类:一类事物共同特性和行为的抽象;对象:类的具体的个体;
   2) 累的定义分为两部分:  
   (1)   类的声明(规定当前类的:类名、属性、行为),具体格式为:
  @interface  类名:父类名
{      
    //  定义类的属性;
 }     
  //  类的行为
   @end      
 (2 )类的实现(实现具体实现)
@implementation    类名
 //  行为的具体实现
@end

代码实现如下:

@interface Car:NSObject{   //类的属性    int lunzi;  //车的轮子    NSString *color;//车的颜色    int speed;  //车的速度}   //类的行为@end//类的实现@implementation Car//行为的具体描述@end
6. OC语言中对象的创建    如:

[Car  new]; 一共做了三件事;

1)向计算机申请内存空间;

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

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

4)  格式为: int  *p = [ Car  new];   可理解为   定义了一个car类型的指针变量;指针变量指向新申请的内存空间。或者:用  Car类 实例化了一个实例对象,对象的名字是P;

OC基础--第二天课程总结:

1.  对象的存储细节:

1) new的时候,申请的存储空间在内存的堆栈区:
       如果实例变量是基本数据类型,此时给初始化为0;
       如果实例变量是OC的字符串类型,此时初始化的是NULL;
2)实例变量保存在:堆区; P指针变量保存在栈区;对象方法保存在了代码区;


2. #pragma mark 预处理指令的使用。
功能:简单来说,就是对代码的分组,方便代码的查找和导航;
格式为:#pregma  mark  +要定位的名称;


3  函数和对象方法的区别。  
1) 对象方法的实现只能写在,@implementation ….@end 中;对象方法的声明只能写在@interface.....@end 中间。
2) 对象方法都以-号开头。类方法都以+开头;
3) 对象方法只能由对象来调用,类方法只能由类来调用,不能和函数一样调用。
4)函数声明可以写在main函数内部也可以写在mian函数外部;
5)对象方法归类和对象所有。


4. 常见错误汇总:
  1) @interface @end和iplementation   @end 不能嵌套包含。
  2)  两个类的对象声明顺序(可以把顺序打乱)。
  3)成员变量没有写在{}里。
  4) 方法声明在了{}里。
  5)在声明时不能对类的成员变量进行初始化,请注意成员变量不能脱离对象而独立存在。
 6) 方法无法像函数那样调用。
7)成员变量和方法不能用static 等关键字修饰,不要和c语言混搅。
8)类的实现可以写在函数后面,在使用之前只要声明就可以了。
9)  NSlog  (@“ %@ ”,exception);可以用@try  方法返回出错内容信息。


5.对象和方法的关系:
 1) 对象做为方法的参数传递: 实例代码如下:

#import <Foundation/Foundation.h>#pragma mark 枪类声明@interface Gun:NSObject{  //实例变量    @public    NSString *_size;  //枪的型号    int _bulletCount; //枪的子弹数}//行为-(void)shoot;@end#pragma mark 枪类实现@implementation Gun-(void)shoot{    NSLog(@"%@ 正在 突突的射击...",_size);}@end#pragma mark 士兵类声明@interface Soldier:NSObject{    @public    NSString *_name;    int life;    int level;//    Gun *_gun;}//行为//士兵开火-(void)fireByGun:(Gun *) gun;@end#pragma mark 士兵类实现@implementation Soldier-(void)fireByGun:(Gun *) gun{    //让枪射击    //gun 不为 null    [gun shoot];}@endint main(int argc, const char * argv[]) {    @autoreleasepool {                //创建一个士兵对象        Soldier *s = [Soldier new];        s->_name = @"三多";        s->life = 98;        s->level = 2;                //创建枪的对象        Gun *gun = [Gun new];        gun->_size = @"小米加步枪";        gun->_bulletCount = 3;                //士兵开枪        [s fireByGun:gun];        [s fireByGun:gun];        [s fireByGun:gun];            }    return 0;}

2)对象作为方法的返回值:格式为:

—(Person *)dispPerson  : (Person *) person;


6.NSString类的介绍:NSString是OC中的核心字符的类之一。字符串创建的方法有:

 1)创建常量字符串,注意使用“@”符号:NSString * asstring=@“this is String!”;
 2)   创建空字符串 NSString *S1=[NSString new];     S1=@“zifuchuan!”;
 3)  第三种方法: NSString*imgName =[NSString stringwithFormat:@“####%02d.jpg”,i];
 4)  用一个已经存在的字符串创建一个新的字符串
   NSString *s2 =[[NSString alloc] initwithString:S1];


7. 字符串长度计算的方法:
     NSString *S1=@“ zhangsanfeng!”;
      int len=[S1 length];
注意:在OC语言中,中文汉字仅占一个字节,而在C语言中,占三个字节;这点是不同的。

8.多文件的开发中,通常应包含以下三个文件:

.h  头文件   .m 声明文件   main.m 主函数。

OC基础--第三天课程总结:

1.类方法的概述:
   +号表示类方法,就是类调用方法,不依赖对象的方法;
   - 号表示是实例(对象)方法,只能是对象可调用,依赖于任何对象的方法
格式为:[类名  方法名];
注意事项:
1) 类方法可以和实例方法同名,这个并不影响使用。
2)类方法可以从父类继承而来,子类可以重写类方法。
3) 类方法和实例方法一样在@interface里声明,在implement里实现。
4) 类方法只能被向类发送类方法消息才被执行,向实例对象发送类方法是不能被触发执行的。
5)类方法里使用了self ,这个self执行的类对象class object而不是实例对象instance object.


2.类方法易犯的错误:
1) 在类的方法中,不能访问实例成员变量;

2)对象方法中可以调用其他的对象方法

  1.当前对象方法中创建对象,使用创建的对象调用对象方法

  2.可以使用self

  3.对象方法可以通过参数传递的对象访问对象方法

3)在类方法中调用其他类方法

  1.可以直接使用本类类名(或其他类名)调用方法

  2.可以使用self

4)类方法中可以调用对象方法

   1.对象作为方法的参数传递过来

   2.可以创建一个对象

   3.类方法不能调用自身,不然会引起无限循环。


3.   对象方法中可以调用其他的对象方法
    1)  当前对象方法中创建对象(可以是当前类的实例对象,也可以是其它类的实例变量),使用新创建的对象调用对象方法
     2) 可以使用self
     3)对象作为方法的参数传递过来,可以使用传递过来的对象调用方法。


4. 类方法调用其他类方法区别;
     1)在类方法中可以调用其他的类方法,
     2) 可以直接使用本类类名(或者其他类名)调用类方法(其他类方法)。
     3) 可以使用self
     4) 类方法不能调用自己,不然会造成死循环;


5.OC类方法应用场景
   如果我们调用一个方法,该方法中不需要使用成员变量,那么我们可以将该方法声明为类方法;


6. 匿名类的概念以及使用;
     1) 匿名类可以访问实例变量,但只能访问一次,以后再次访问,实际上访问新的空间了;
     2) 使用匿名的类 ,可以调用方法。
   [[Car  new] stop]    调用stop ,stop是一个方法;
   [[Car  alloc]init]等价于 [car new];


7.  匿名类作为方法的参数:
[[Person new] gohome :[Car new] ] ;


8.封装实现的步骤:
1) set方法的书写规范;
  (1)set方法一定是一个对象方法;
  (2) set 方法一定不能有返回值;
  (3) set方法必须以set开头;
  (4) set之后跟的是实例变量去掉下划线,并且首字母要大写;
  (5)set方法一定有参数,而且参数的类型和实例变量的类型一致;
  (6)set 方法的形参名一般是去掉下划线的实例变量名;   
  (7)形参名不能和实例变量名同名;
  (8)set方法实现中,一定要用形参给实例变量付值;


2) get  方法(访问器):
  (1)作用:
  (2)get方法一定是一个对象方法;
  (3)get方法一定有返回值,返回值的类型和实例变量的类型要一致;
  (4)get 方法的方法是去掉下划线的实例变量名;
  (5)get方法一定没有参数;
  (6)get 方法实现中,一定是返回值实例变量值;


9.依赖关系:A对象作为B对象的局部变量或者是方法形参,B依赖于A ,我们称为A与B之间存在一种依赖关系;

10: 关联关系:HasA关系,当一个对象拥有另一个对象的时候,当对象B为对象A的成员变量的时候,B对象与A对象存在一种关联关系;

11.方法重载:方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。OC中 重载是指参数个数不同,但是返回类型的名字相同。或者是参数个数不同,但其标签不相同。
但是在OC中没有严格的方法重载,方法名不能相同;

12. static 关键字:
1) 变量为静态变量位于程序的全局数据区。
2) 作为全局变量,可将声明放在实现文件的开始部分。
注意:使用static 修饰实例变量是不被允许的,也不能修饰对象方法,但是修饰局部变量是可以的。



0 0
原创粉丝点击