OC核心基础快速掌握之万丈高楼平地起

2024-02-11 14:50

本文主要是介绍OC核心基础快速掌握之万丈高楼平地起,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本博旨在最短的时间内的总结最核心的知识,如果有疑问,欢迎进行留言,我会在看到消息后第一时间内回复,如果有错误,欢迎指出,非常感谢。

核心思想

任何语言的学习都需要先掌握最基本的元素:
基本数据类型、集合类型程序结构类/属性/方法

一、基本数据类型

1. 数据元素

命名规则:由字母、数字、下划线、$符号组成 大小写敏感
定义变量时候不能使用关键字
在这里插入图片描述
基本数据类型(前面6行右边为输出方式):

int %d / %i
short %hd / %hi
long %ld / %li
unsigned int %u
float %f
char %c
double id(通用的指针类型) enum(声明枚举类型)
signed struct union (共用体联合) void(声明函数无返回值或者无参)

2.运算符
  • 加减乘除+ - * / %
  • += -=
  • 自增 a++ ++a
  • sizeof()
  • , (逗号运算符) 举例:int b=(1=5,a++,a*6) ,结果是36
  • 关系运算符(返回结果真为1,假为0) 且> < >= <= 优先级高于 == !=
  • 逻辑运算符: 与或非 && || ! (注意:&&前面为假,后面不会进行运算,||前面为真,后面不会进行运算)
  • 位运算符 << >>
  • 三目运算符 条件? 真语句执行:假语句执行
3.集合类型

NSArray 和 NSMutableArray
NSDictionary和NSMutableDictionary
集合类学习
数组的四种遍历方式

二、程序结构

1. 顺序结构
2. 分支结构
3. 循环结构

程序结构

三、类/属性/方法

类/属性/方法

四、常用的#define宏定义

1.定义常量
(1)定义导航栏的高度 竖屏时,导航栏高度为44,这时可以定义一个常量

#define kNavigationBarHeight 44

(2)屏幕的宽度

#define KSCREEN_WIDTH [UISCREEN mainScreen].bounds.size.width
#define KSCREEN_HEIGHT [UISCREEN mainScreen].bounds.size.height

2.内存的安全释放对象

#define SAFE_RELEASE(x) [x release];x=nil

注意尾句没有冒号,这句在dealloc时候调用,delloc时候将对象置为nil,这就释放了该对象的内存区域,防止内存泄漏
3.判断IOS系统版本
(1)当前系统版本号

#define kCurrentSystemVersion [[[UIDevice currentDevice] systemVersion] floatValue]
#define IOS_VERSION_9_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue]>=7.0)?(YES):(NO))

(2)当前的系统语言

#define kCurrentLanguage [[NSLocale preferredLanguages]objectAtIndex:0]

4.调试信息

#ifdef DEBUG  
# define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函数名:%s]\n" "[行号:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);  
#else  
# define DLog(...);  
#endif
  1. VA_ARGS
    是一个可变参数的宏,很少人知道这个宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持)。宏前面加上##的作用在于,当可变参数的个数为0时,这里的##起到把前面多余的","去掉的作用,否则会编译出错, 你可以试试。
  2. FILE 宏在预编译时会替换成当前的源文件名 。
  3. __LINE__宏在预编译时会替换成当前的行号。
  4. FUNCTION__宏在预编译时会替换成当前的函数名称 有了以上这几个宏,特别是有了__VA_ARGS ,调试信息的输出就变得灵活多了。

5.判断是否是ARC

#if __has_feature(objc_arc)
//使用arc编码
#else
//使用手动内存管理
#endif

6.定义GCD的后台线程和主线程

//后台运行
#define BACK_GCD(block) dispatch_async(dispath_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),block)
//主线程运行
#define MAIN_GCD(block) dispatch_async(dispatch_get_main_queue(),block)

五、面向对象特性

1.构造方法、自定义构造方法、id类型
1.1 id类型

(1)id是一种类型,万能指针,能够指向/操作任何的对象
typedef struce objc_object id;
注意点:在使用id定义的时候,一定要注意
id类型默认已经包含了*,所以不需要在加*。
局限性:调用一个不存在的方法,编译器会马上报错。
(2) instancetype类型

  1. instancetype会让编译器检查实例化对象的准确类型
  2. instancetype只能用于返回类型,不能当做参数使用
  3. 相比id类型,instancetype只能用在返回值类型,不能像id一样用在参数类型上
  4. instancetype比id多一个好处:编译器会检测instancetype的真实类型
1.2构造方法

(1)完整的创建一个对象:Person *p = [Person new];
new分别调用两个方法:alloc(分配空间),init(初始化空间)
(2)重写构造方法
三步:
1.初始化当前列的实例变量之前,初始化父类的
2.初始化当前类的实例变量
3.返回

举例说明

-(id)init{if (self = [super init]) {_age = 18;_weight = 50.0f;}return self
}
1.3自定义构造函数

规范:一定是对象方法- 开头
返回值一般是id类型
方法名一般以initWith开头

-(id)initWithName:(NSString *)name andAge:(int)age {//先做父类事情if(self = [super init]) {_name = name_age = age}return self
}

重写:指的是将父类的方法重写实现(子类不需要在声明,其实是内部默认已经声明)

2.函数与方法的区别
2.1方法

方法是Object-C独有的一种结构,只能在Object-C中声明和使用,C语言不能声明、定义和使用。

  1. 类方法以+号开头,对象方法以-号开头
  2. 在@interface 和 @end 之间声明,在@implention和 @end之间定义
  3. 类方法只能有由类来调用,对象方法只能由对象来调用
  4. 方法声明和实现中用到的数据类型必须使用()括住
2.2函数

函数即C语言中的函数

  1. 函数能写在文件中的任意位置(@interface和@end之间除外),函数归文件所有
  2. 函数调用不依赖对象
  3. 函数内部不能直接通过成员变量名访问某个对象的成员变量

这篇关于OC核心基础快速掌握之万丈高楼平地起的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/700071

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据