OC基础-概述(一)

Objective-C简称Obj-C或者OC。

1)面向对象的C

  • OC相对于C只是增加了一部分面向对象的方法;
  • 将C的一些复杂的繁琐的语法封装的更为简单;
  • OC完全兼容C语言;
后缀
  • OC后缀.m m代表OC中最重要的一个机制--消息机制
  • C 后缀.c
main函数
  • 依然是程序的入口和出口
import指令

1).以#号开头,是1个预处理指令.
2).作用: 是#inlcude指令的增强版. 将文件的内容在预编译的时候拷贝写指令的地方.
3).增强: 同1个文件无论#import多少次,只会包含1次.
如果#include指令要实现这个效果 就必须要配合条件编译指令来实现.
而#import指令只需要直接包含就可以 其他什么都不用作.

  • 简要原理: #import指令在包含文件的时候,底层会先判断这个文件是否被包含 如果被包含就会略过 否则才会包含.

2)

Foundation框架

这个框架中提供了一些最基础的功能 输入和输出. 一些数据类型.
Foundation.h的路径:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/Foundation.h
Foundation.h这个文件中包含了Foundation框架中的其他的所有的头文件.
所以,我们只要包含Foundation.h 就相当于包含了Foundation框架中所有的头文件.
那么Foundation框架中的所有的函数和类就可以直接使用.

NSLog
  • NSLog 执行时间+程序名称+进程编号+内容
    2021-07-21 09:50:35.230746+0800 TestOc[3720:35996] Hello, World!
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {//自动释放池
       float f = 12.12f;
        NSLog(@"Hello, World!--%f",f);
    }
    return 0;
}
NSString

NSString类型的指针变量,只能用来存储OC字符串的地址;
NSString 字符串常量必须使用一个@前缀;
(指针变量加星号)
注意:

  • NSLog第一个参数是一个OC字符串,需要使用@前缀;
  • NSLog输出OC字符串的值,使用占位符%@
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    NSString *str = @"张三";
    NSLog(@"大家好,我叫%@",str);
    return 0;
}

3)函数的定义与调用

#import <Foundation/Foundation.h>
void sayHI();
int main(int argc, const char * argv[]) {
    sayHI();
    return 0;
}

void sayHI(){
    NSString *str = @"张三";
    NSLog(@"大家好,我叫%@",str);
}

image.png

4)C与OC对比

1. OC程序的编译、链接和执行步骤和C语言基本一致;

以在终端中建立OC语言文件为例

  • 在当前工作文件夹下,用touch命令建立一个.m的OC语言程序文件
  • 在.m文件中写上符合OC语法规范的源代码
  • 使用cc -c命令将源代码编译为目标文件.o文件
  • 使用cc命令将.o文件链接源文件
    与C语言略有不同,必须要告诉编译器去哪一个框架中找OC文件中使用的函数或者类 cc first.o -framework Foundation
2. OC和C各个阶段的后缀名对比
对比 C OC
源文件 .c .m
目标文件 .o .o
可执行文件 .out .out
3. OC和C的数据类型对比

首先,OC中支持C语言中的所有的数据类型。

  • 基本数据类型 (int double float char)
  • 构造类型 (数组 结构体 枚举)
  • 指针类型 (int* double* float* char*)
  • 空类型 (void)
  • typedef自定义类型

OC支持以上所有类型
另外,OC还建立了一些新的数据类型:

  • BOOL类型--YES/NO
    BOOL类型的本质是typedef signed char BOOL//有符号的char变量
    进一步查看其定义内容会发现:
#define YES ((BOOL)1)
#define NO ((BOOL)0)

所以我们得知,YES实际上就时1,NO实际上就是0。

        BOOL isOK = YES;
        NSLog(@"%d", isOK);
//2021-07-21 09:59:40.066494+0800 TestOc[5004:50166] 1
  • Boolean类型--true/false
    Boolean类型的本质是typedef unsigned char Boolean;//无符号的char变量
#define true 1
#define false 0

所以我们得知,true实际上就时1,false实际上就是0。

       Boolean isOK = true;
        NSLog(@"%d", isOK);
//2021-07-21 10:05:29.350056+0800 TestOc[5758:57446] 1
  • class 类
  • id 万能指针
  • nil 和C语言的NULL差不多
  • SEL 方法选择器
  • block 代码段

仅供个人学习使用

https://zhuanlan.zhihu.com/p/174716626

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容