黑马程序员——OC——类和对象

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
 1.关于类和对象: 
    1>类关注点:  具有相同属性或行为的对象都可抽象成一个类 ,类是抽象的
         类名(第一个字母必须大写,不能有下划线);
         属性;
         行为(功能)  
    2>对象:对象是根据类创建而来,是实体。
  
 2.类的声明与实现
   声明的作用:1>声明有哪些成员变量。 
                        2>声明有哪些方法。
   实现的作用:实现声明中声明的方法,定义方法的作用。

  
  //声明一个Car类(声明对象的属性和行为):
 @interface  Car :NSObject     // (car是类名, :NSObject目的是让Car这个类具有创建对象的能力),也是继承NSObject类中所有属性
  {
    @public; // 代表所有成员变量都可以被指针间接访问。
    int _years;  //创建一个years属性(成员变量,默认为0,且不能在此进行初始化),且声明中不能给成员变量赋值
     /*
    注:成员变量名一定要以下划线__开头:
     优点:(1)可以和get方法名区分
               (2)可以和普通变量名区分
   */
  }

/*
  方法(实现,方法之间可以相互嵌套调用,对象方法和类方法之间也可互相调用):
    (1)方法名、参数、返回值(声明、实现),放于类的声明和实现中间
    (2) 只要是OC对象的方法,必须以减号 - 开头
    (3) OC方法中任何数据类型必须用小括号( ) 扩住.(OC小括号作用:扩住数据类型)
*/
- (void) run;   //run是方法名,定义一个run的方法   方法存在于类中
 @end

    //类的实现:(用来实现@interface中声明的方法)
@implementation 类名
    //方法的实现(说明方法里有什么代码,也就是说方法是什么功能)
-(void) run
{
NSLog(@"跑起来"); // 哪个对象调用此方法,则去哪个对象内寻找成员属性
}
@end

int main()
{
Car *p=[Car new];  //执行car这个类的new行为来创建对象,并且会返回新对象本身(对象地址),并且定义Car类型指针p 指向对象地址
// 给p所指向对象的years属性赋值 (OC中只能通过指针操作对象)
p->years=20;
[p run]; //给p所指向对象发送一条run消息
} 

/*
 消息发送机制:
      第一步:告诉指针p所指向的对象执行run。
      第二步:对象会沿着ISA指针指向的类,在类中寻找run方法。
      第三步:当对象在类中找到run方法时,就会调用此方法。
*/

3.类的内存:
   黑马程序员——OC——类和对象_第1张图片
  1>类在创建对象之前,会将类加载进内存,而且类中存放的是方法列表(不会存放成员属性)
  2>每个对象都默认含有ISA指针,此指针指向类,然后每个类都有superclass指向父类。
  3>每个对象的成员变量是单独拥有的,方法是共有的。

4.方法和函数区别
   (1)对象方法都是减号-开头,方法必须是对象调用、(通过对象调用方法)
   (2)对象方法归类对象所有。
           1>方法声明写在@interface 和 @end之间
           2>方法实现写在@implementation和@end之间
   (3)函数跟对象无关系(函数不依赖对象),跟类没有任何联系,函数归整个程序文件所有。
   (4)函数不能访问OC对象成员。
   (5)函数不能写在@interface和@end之间

注:如果类需要调用结构体,则首先需要使用结构体创建结构体具体数值,然后类才能调用,     
   eg1:
       错误写法:p->birthday={2014,4,2};
       正确写法1: p->birthday.year=2014;
                           p->birthday.month=4;
                           p->birthday.day=2;
       正确写法2: Data d={2014,4,2};
                            p->birthday=d;
         原因:因为结构体只能在定义变量的同时赋值,不能先定义变量,然后再赋值。
         注意点:指针使用->   ; 结构体使用.点语法

5. 方法注意点
   1>关于括号:oc方法中,括号只能括住参数类型,
   2>关于冒号:问题:一个形参对应一个冒号:,且冒号前最好有描述后面参数的语句
   3>关于方法名:
  
 eg1:
      -(int)qiuheNum1:(int)num1 andNum2:(int)num2
    //以上整个方法返回int类型,形参是num1和num2,形参类型是int。
    //方法名是qiuheNum1:andNum2 (冒号与后续描述也是方法名的一部分)

你可能感兴趣的:(OC)