1. OC1>OC是面向对象:关注的是解决问题需要哪些对象。2> 和C程序一样,OC也需要通过编译和链接两个步骤。终端指令:以main.m为例编译:cc -c main.m链接:cc mian.o -framwork Foundation运行:./a.out3> 关键字以@开头,字符串以@开头,其他基本语法:
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:2> 类的实现:就做一件事情,说清楚声明中的方法具有哪些功能。<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>
消息机制:1> 告诉P所指向的对象之行run消息;<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>
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;原因:因为结构体只能在定义变量的同时赋值,不能先定义变量,然后再赋值。注意点:指针使用-> ; 结构体使用.点语法
OC基础——类和对象
最新推荐文章于 2020-05-12 09:18:31 发布