黑马程序员——OC的初步认识,类和对象

时间:2023-02-20 22:54:50

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

一、OC简介

oc是在c语言的基础上,增加了面向对象的语法,开发的一种语法。
oc可以完全兼容c语言,可以在oc中混入c语言代码和一部分的c++代码
oc用途:用于Mac os x平台和ios平台的应用程序开发
文件后缀名c->.c oc->.m c++->.m

二、语法

1.关键字都是以@开头:@interface,@implementation,@end,@public,@protected等等
2.字符串以@开头: @”Hello”
3.其它语法
基本数据类型:char,int,float,double,BOOL…
null:相当于c语言中的null
基本语句: 循环语句,条件语句等等

三、OC基本理解

1.OC程序运行过程

m源文件(编译)->.o目标文件(链接)->a.out(可执行文件)

2.示例:
黑马程序员——OC的初步认识,类和对象

.#import

<1>用途:

跟#include一样,拷贝文件的内容

可以自动防止文件的内容被重复拷贝

<2>主头文件

主头文件:最主要的头文件,名字一般跟框架名称一样,包含了框架中的所有其他头文件

Foundation框架的主头文件名称就是Foundation.h

只需要包含Foundation框架主头文件,就可以使用整个框架的东西

<3>运行过程

1> 编写OC源文件:.m、.c

2> 编译:cc -c xxx.m xxx.c

3> 链接:cc xxx.o xxx.o -framework Foundation

总结:只有用到了Foundation框架才需要加上-framework Foundation)

<4>NSLog与printf的区别

NSLog接收OC字符串作为参数,printf接收C语言字符串作为参数

NSLog输出后会自动换行,printf输出后不会自动换行

使用NSLog需要#import <Foundation/Foundation.h>

使用printf需要#include<stdio.h>

3.BOOL变量

BOOL类型的变量有2种取值:YES(为1)、NO(为0)
BOOL的输出(当做整数来用)

4.面向对象和面向过程
OC是面向对象的,C是面向过程的

常用术语:

面向过程:procedure oriented
面向对象:object oriented(简称OO) 
面向对象编程:object oriented programming

面向对象和面向过程的区别:

示例:以人打开电脑听歌为例子

a.面向过程:1>打开电脑 2>播放电脑中歌曲 3>关闭电脑
b.面向过程:1>开机 2>播放歌曲 3>关机

区别分析:面向过程关注的是解决问题需要哪些步骤,面向对象关注的是解决问题需要哪些对象

5.类和对象的关系

前面已经简单介绍了面向对象的思想,在面向对象的编程思想中,有两个名词我们会经常用到:类和对象

1.我们可以把【类】和【对象】的关系就像是【图纸】和【实物】的关系。在学习OC的过程中,我们要习惯把所有可能的主体具化成对象。
2.OC是利用类来创建对象,对象是类的具体存在。
3.面向对象解决问题应该是先考虑需要设计哪些类,再利用类创建多少个对象。

<1>类的创建

举个例子:如果“动物图纸”是一个类,那么我们就可以根据这张图纸创建出很多个动物实体,这些动物实体就是“动物图纸”这个类生成的对象。

在创建类时,有两个要素:【属性】和【行为】(一般习惯把”行为”称呼为”方法”)

在图纸中,我们需要描述清楚动物的:年龄,重量、毛色、速度、等等,这些就是动物这个类的属性;

而动物具有跑、跳、叫、打架等行为,这些行为(方法)我们也需要在动物这个类中写明。

<2>类的创建方法

类的创建分为声明和实现两部分,一般类的声明写在.h文件中,类的实现写在.m文件中。

类的属性不需要写实现,所以类的实现其实就是写方法的实现。方法的声明和实现方法有点象函数的声明和实现。

类名的声明写在@interface 和 @end 之间

//文件名:Car.h

//这个文件中写类的声明
#import <Foundation/Foundation.h>

//@interface标志着类的生命开始
//这格式固定格式:@interface 类名 :父类名(父类是后面所学,当前我们默认写NSObject)

@interface Car : NSObject
{
        //对象属性默认是被保护的,想要直接访问就必须在属性前加上@public
        @public 
        //属性声明
        int _wheels;   //轮胎个数
        int _speed;    //时速
}
//大括号后面写类的方法的声明
//累的方法有2种:1.对象方法:只有这个类创建出来的对象才能调用,以-号开头
               2.类方法:只有这个类可以调用,以+号开头

//这是一个对象方法的声明
- (void) run; 

//@end标志着类的声明的结束
@end  

类的实现
类名的实现写在@implementation 和 @end 之间

Car.m   //文件名
//这个文件写类的实现,类的实现其实就是方法的实现,因为类的属性不需要写实现
//把类的声明拷贝到这个文件中,以便写方法的实现时让程序可以找到属性和方法的声明
#import "Car.h"

//@implementation标志着类的实现的开始

@implementation Car
//在@implementation和@end之间写类的实现
- (void)run
{

  NSLog(@"车子跑起来了");  
}
//@end标志着类的实现的结束
@end

2.对象的创建

OC中,我们可以根据一个类创建出无数个对象。其实,类也是一个对象。只要是对象,我们就可以调用对象所具有的方法。

调用对象方法的语法是: [ 对象名 方法名 ];

所有类都默认有一个名叫 new 的方法,我们通过这个方法可以创建出类。

int main()
{
    //在OC中,想执行一些行为,就写上一个中括号[行为执行者 行为名称] ->[Car new]
   [Car new];//执行了Car这个类的new行为来创建新对象
   Car *p = [Car new]; //定义了指针变量p,p指向Car类型的对象
   //Car new会创建出一个新对象,并且会返回新对象本身(新对象地址)
   p->wheels = 4;
   p->speed = 250; //给新对象的wheels属性,speed属性赋值
   NSLog(@"车子有%d个*,时速为:%dkm/h",p->wheels, p->speed);
   return 0;
 }

3.类的命名规范

1>.类名的命名规范

  • 类名的第一个字母必须是大写

  • 不能有下划线

  • 多个英文单词,用驼峰标识

2>.属性的命名规范

  • 必须以下划线开头(行业规范,后面我们就会知道为什么这样命名)

  • 多个英文单词,驼峰标识

3>.方法的命名规范

方法名以加号’+’或减号’-‘开头,对象方法以减号开头,类方法以加号开头。

方法名前写返回值类型,如果需要传入参数,方法名以冒号结束,并在冒号后面描述参数类型和形参名称

数据类型必须用括号括起来 例如:(void)、(int) 、(NSString*)

4.方法和函数的区别

1>.对象方法都是以减号-开头。
2>.对象的方法声明必须写在@interface和@end之间
3>.对象的方法实现必须写在@implementation和@end之间
4>.对象方法只能由对象来调用,不能当做函数来调用
5>.函数能写在文件的任何位置,函数归文件所有
6>.函数调用不依赖于对象
7>.函数内部不能直接通过成员变量名访问某个对象的成员变量