OC-类

时间:2024-01-13 12:36:44

1、关于头文件
  #include <stdio.h>    
  #import <Foundation/Foundation.h>

  区别:#import指令导入更快更有效率。#include指令告诉编译器做呆板的复制粘贴,将包含的内容粘贴到目标文件中来。而#import则会先检查之前是否已经导入过这个文件或是已经包含到目标文件中了。

  再仔细观察两个头文件名
  Foundation.h我们称之为主头文件, 主头文件中又拷贝了该工具箱中所有工具的头文件, 我们只需要导入主头文件就可以使用该工具箱中所有的工具, 避免了每次使用都要导入一个对应的头文件。
  规律: 所有的主头文件的名称都和工具箱的名称一致
          所有的主头文件都是导入了该工具箱中所有工具的头文件

2、第一个oc程序

 /*
因为OC完全兼容C, 所以可以在OC程序中编写C语言代码
并且可以将C语言的源文件和OC的源文件组合在一起生成可执行文件
*/
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
printf("c hello world\n");
/*
printf和NSLog的区别:
NSLog会自动换行
NSLog在输出内容时会附加一些系统信息
NSLog和printf接收的参数不一样
*/
NSLog(@"OC hello World"); return ;
}

3、oc类

  C语言中函数分为声明和实现,OC中定义一个类也分为声明和实现

  1)类声明

// 以@interface开头 , 以@end结尾, 然后再class name对应的地方写上 事物名称, 也就是类名即可
// 声明一个类的目的就是为了告诉系统, 我们这个类中有哪些属性和行为
// OC类声明中属性只能在写@interface和@end之间的{}中
@interface Person : NSObject
{
//注意: 默认情况下, OC对象中的属性是不能直接访问的
int _height; // 注意: 编写OC类属性的时, 建议将所有属性的名称前面都加上_
int _weight;
int _age;
} // 行为
@end

  2)类实现

// 以@implementation开头, 以@end结尾, 然后在class对应的地方写上声明时声明的类的名称, 须和声明的类名相同
@implementation Person // 行为的实现 @end

  3) 方法的声明和实现

@interface Person : NSObject
{
//此处代码省略
}
// 行为
/*
OC中的行为和C语言中的函数一样, 都是用来保存一段特定功能的代码
C语言中定义一个函数, 分为声明和实现, 声明写在.h中, 实现写在.c中
OC中定义一个方法, 也分为声明和实现, 声明写在@interface中, 实现写在@implementation C语言的函数分为两种: 内部函数和外部函数
OC中的方法也分为两种; 类方法和对象方法
类方法只能用类名调用, 对象方法只能用对象调用
OC中的类方法用+表示, OC中的对象方法用-表示 编写OC方法的规律和C语言一模一样: 1.确定函数名称 2.确定形参 3.确定返回值 4.确定返回值类型
*/
// 注意: OC中的方法, 如果没有形参不需要写(), 而是直接写一个;OC方法中的()是放数据类型的 - (void)about; @end // 类的实现
@implementation Person
// 行为的实现
- (void)about
{
NSLog(@"此人信息");
}
@end

  

  4)main函数

int main(int argc, const char * argv[]) {
// 在OC中想要通过一个类来创建一个对象, 必须给类发送一个消息
// 发送消息的语法是 [类名称/对象名称 方法名称];
/*
只要通过一个类调用类的new方法, 也就是给类发送一个叫做new的消息之后
系统创建对象的过程如下
1. 为Person类创建出来得对象分配存储空间
2. 初始化Person类创建出来的对象中的属性
3. 返回Person类创建出来的对象对应的地址
*/
// 通过一个Person类型的指针接收了 Person对象的地址
// 利用Person类型的指针保存了Person对象的地址, 那么我们就称Person类型的指针p之为Person对象
// OC中的类其实本质就是一个结构体, 所以p这个指针其实就是指向了一个结构体
Person *p = [Person new];
// p->_height= 70; c语言中我们可以这样做,但是在oc中不允许直接访问成员变量,  

[p  about]; //调用对象方法

    return ;
}

  最后说一下Objective-C推荐命名规则

  指向实例的变量使用"骆驼拼写法(camel case)"来命名。以小写字母开头,接下来每个单词的第一个字母使用大写。

  方法的命名也是用骆驼拼写法。

  类的名称以大写字母开头,但是接下来的单词继续使用骆驼拼写法。