OC基础——类和对象



1. OC
 1>OC是面向对象:关注的是解决问题需要哪些对象。
 2> 和C程序一样,OC也需要通过编译和链接两个步骤。
终端指令:以main.m为例
      编译:cc -c main.m
      链接:cc mian.o -framwork Foundation
      运行:./a.out
 3> 关键字以@开头,字符串以@开头,其他基本语法:

 4>和C语言一样,OC程序的入口依然是main函数。
 5>NSLog与printf的区别:
  •      NSLog 输出后会自动换行,printf输出后不会自动换行;
  •      使用NSLog需要#inport<Foundation/Foundation.h>(Foundation框架的主头文件)
  •      使用printf需要#include<stdio.h> 
2.类和对象
1> 类:具有相同属性或行为的对象都可抽象成一个类 ,类是抽象的,是对对象的描述,相当于造车的图纸。想要创建对象必须先有类。
一般的名词都是类。    
类主要考虑:
    类名:第一个字母必须大写,且不能有下滑线,多个单词组成的类名用驼峰标识。
    属性:(成员变量)
    方法:(行为)
2> 对象:对象是根据类创建而来,是实体,相当于根据图纸造出来的车子。

3. 类的声明和实现
1> 类的声明:用来说明类里面具有哪些属性(成员变量)以及有哪些方法。
      格式:写在@interface和@end之间。
eg:
<span style="font-family:Microsoft YaHei;font-size:14px;">//声明一个Car类(声明对象的属性和行为):
 @interface  Car :NSObject     // car是类名,NSObject目的是让Car这个类具有创建对象的能力,:是继承的意思,即继承NSObject类中所有属性
  {
    @public; // 代表所有成员变量都可以被指针间接访问。
    int _speed;  //创建一个speed属性(成员变量,默认为0,且不能在此进行初始化),且声明中不能给成员变量赋值
     /* 注:成员变量名一定要以下划线__开头:
        优点:(1)可以和get方法名区分
              (2)可以和普通变量名区分
   */
  }
 -(void)run;//声明一个run方法。
@end</span>
2> 类的实现:就做一件事情,说清楚声明中的方法具有哪些功能。
<span style="font-family:Microsoft YaHei;font-size:14px;"> //方法的实现(说明方法里有什么代码,也就是说方法是什么功能)
-(void) run
{
    NSLog(@"跑起来"); // 哪个对象调用此方法,则去哪个对象内寻找成员属性
}
@end

int main()
{
Car *p=[Car new];  //执行car这个类的new行为来创建对象,并且会返回新对象本身(对象地址),并且定义Car类型指针p 指向对象地址
// 给p所指向对象的years属性赋值 (OC中只能通过指针操作对象)
   p->speed=200;
   [p run]; //给p所指向对象发送一条run消息
} </span>
消息机制:1> 告诉P所指向的对象之行run消息;
                2> 对象会沿着内部的ISA指针指向的类,在类里面寻找run方法;
                3> 当在类中找到此方法时,就调用此方法。

方法只有声明,没有实现(经典错误);
方法没有声明,只有实现(编译器会警告,但是可以运行,OC的弱语法);
编译的时候,访问没有的成员变量会报错,访问没有的方法,只会警告。

注意
  1> 类在创建对象之前,会将类加载进内存,而且类中存放的是方法列表(不会存放成员属性)
  2> 每个对象都默认含有ISA指针,此指针指向类,然后每个类都有superclass指向父类。
  3> 每个对象的成员变量是单独拥有的,方法是共有的。

4.  方法
1> OC方法分为两种,对象方法和类方法: 
     对象方法:以“-”号开头
     类方法:以”+“号开头。
2> 不带参数的方法
   声明:


   调用:


3> 带参数的方法
声明:



调用:



4>方法名注意:
     冒号也是方法的一部分;
     同一个类中不允许有两个对象的方法名相同。

5. 方法与函数的区别
   (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;
         原因:因为结构体只能在定义变量的同时赋值,不能先定义变量,然后再赋值。
         注意点:指针使用->   ; 结构体使用.点语法



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值