基于Objective-C的iOS开发--入门篇

  • 1、Objective-C 基础
  • 2、ios开发环境搭建
  • 3、CocoaPods
  • 4、LLDB调试
  • 5、ios应用启动流程
  • 6、关于代码阅读

1、Objective-C 基础

Objective-C,顾名思义,其扩展了标准的ANSI C语言,引入了消息传递机制和面向对象编程。(以下默认已具有C/C++语言基础)

  • .h文件:头文件。
  • .m文件:源代码文件,可以包含Objective-C 和 C的代码。
  • .mm文件:源代码文件,可以包含Objective-C、C以及C++的代码。仅在需要使用C++特性时使用。
  • 头文件引用:除了可以使用#include,Objective-C 提供了更好的指令 #import确保相同的头文件仅会被包含一次(推荐使用这种方式)。
  • 消息传递:Objective-C的面向对象语法源于Smalltalk消息传递风格。不同于c++等面向对象语言 对象调用的说法,其采用对象之间消息传递的思想,天生具备动态绑定能力,允许传递未知的消息(编译器不报错),直到运行时才处理消息。反之,C++在编译期就会检查是否有对应的方法,若没有则报错。另外Objective-C也可以将消息发送给空对象,默认为不做任何事,不用担心程序崩溃。
// c++对象调用方法
obj.method(argument);// Objective-C消息传递
[obj method:argument];
  • 打印日志
 NSLog(@"Hello, World!"); // @ 是为了和C字符串区分,表示NSString 字符串
  • 判断文件是否存在
// 取得沙盒目录
NSString *localPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// 要检查的文件目录
NSString *filePath = [localPath  stringByAppendingPathComponent:@"abc.doc"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:filePath]) {NSLog(@"文件abc.doc存在");
}
else {NSLog(@"文件abc.doc不存在");
}
————————————————
版权声明:本文为CSDN博主「itdali」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013892686/article/details/51745566
  • 应用沙盒

    • 每个ios应用都有自己的应用沙盒,一般来说每个应用只能访问自己的沙盒文件,每个沙盒中包含三个目录:Document、Library、temp
    • 获取沙盒路径
//Home目录
NSString *homeDirectory = NSHomeDirectory();//Document目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];//Cache目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];//PreferencePanes目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];//Libaray目录NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];//tmp目录
NSString *tmpDir = NSTemporaryDirectory();

参考:
[1]从零开始的iOS开发之旅:Objective-C篇(上)
[2]Objective-C 入门教程
[3]iOS开发~向沙盒中写入文件、文件夹以及从沙盒中读取文件
[4]iOS 如何将NSString类型字符串 写入本地文件

2、ios开发环境搭建

  • 首先具备一台mac电脑,下载Xcode并安装。
  • 熟悉xcode界面
  • 构建第一个ios项目
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) {@autoreleasepool {// insert code here...NSLog(@"Hello, World!");}return 0;
}

由于xcode版本的不同,具体的xcode界面可能会和参考博文有所不同,但是思路是大致相同的。
参考:
[1]【iOS 开发】Objective-C 入门 Xcode 环境详解
[2]一些教程集合

3、CocoaPods

  • CocoaPods是开发ios应用程序的第三方库的依赖管理工具,用Ruby写的,由若干个Ruby包(gems)构成。Gem是一个管理Ruby库和程序的标准包,例如通过Gem来安装cocoapods: sudo gem install cocoapods
  • Ruby文件扩展名是.rb;Ruby语法;
  • podspec文件:是cocoapods引入第三方代码库的配置索引文件。我们将自己的工程创建发布成一个pod需要编写.podspec文件。
  • Podfile&Podfile.lock的解析

参考:
[1]CocoaPods原理(一)
[2]Podspec 文件分析

4、LLDB调试

  • bt: 查看堆栈信息
  • image lookup --type [name] :查看类型
  • image lookup --name :查看方法信息文件位置等
  • d: 反汇编当前目标中的指定命令,默认为当前函数
  • up: 查看上一步的堆栈调用信息
  • frame select [number] : 跳转至指定堆栈查看,源码和汇编(系统的或打包的),定位某个方法的具体实现。

参考:
[1] LLDB 调试小结

5、ios应用启动流程

  • 解析Info.plist
  • Mach-O(可执行文件)加载
    • app的二进制文件内部的所有方法和函数调用,都有一个在当前二进制文件中的偏移地址。运行时(加载到内存),每次系统都会随机分配一个ASLR(Address Space Layout Randomization,地址空间布局随机化)地址值,如果想访问二进制文件中的某个方法,只需要ASLR+偏移值找到运行时的内存地址。
  • 程序执行
    • pre-main阶段
    • main阶段
      • 调用main函数
      • 调用UIApplicationMain()
      • 调用applicationWillFinishLaunching
      • 调用didFinishLaunchingWithOptions:完成初始化,并展示首页
        参考:
        [1] iOS应用的启动流程和优化详解

6、关于代码阅读

  • 画流程图
  • UML 类图、时序图: 在线画图
  • 在线画图2

基于Objective-C的iOS开发--入门篇相关推荐

  1. ios开发入门篇(四):UIWebView结合UISearchBar的简单用法

     UIWebView是ios开发中比较常用的一个控件.我们可以用它来浏览网页.打开文档等,今天笔者在这里简单介绍下UIWebView和UISearchBar结合起来的用法,做一个简单的类浏览器. 一: ...

  2. iOS开发入门——基础篇一

    文章目录 1. iOS应用生命周期 1.1 应用程序的架构 1.2 iOS应用的5种状态: 1.2.1做一些操作对应的生命周期调用的顺序 1.2.2全面的生命周期执行流程图 1.3 Main函数入口 ...

  3. 【微信小程序】开发入门篇(二)

    前言 ❤️ 所谓信仰,可能就是在人们一无所剩的时候仅有的那种东西 ❤️ [微信小程序]开发入门篇(二) 一.小程序的宿主环境 (1)宿主环境简介 1.1 什么是宿主环境 1.2 小程序的宿主环境 (2 ...

  4. 后悔没早点看这篇直播系统定制开发入门篇

    直播想必大家都不陌生了,在互联网的风口下,以及5G技术的推动,流量带宽的提高,使得直播在我们生活中扮演着越来越重要的角色.本文先来讲一下入门直播需要了解的一些基本概念,搜集整理了直播入门需要了解的一些 ...

  5. iOS开发UI篇—transframe属性(形变)

    iOS开发UI篇-transframe属性(形变) 1. transform属性 在OC中,通过transform属性可以修改对象的平移.缩放比例和旋转角度 常用的创建transform结构体方法分两 ...

  6. iOS开发拓展篇—CoreLocation简单介绍

    iOS开发拓展篇-CoreLocation简单介绍 一.简介 1.在移动互联网时代,移动app能解决用户的很多生活琐事,比如 (1)导航:去任意陌生的地方 (2)周边:找餐馆.找酒店.找银行.找电影院 ...

  7. iOS开发拓展篇——如何把项目托管到GitHub

    iOS开发拓展篇--如何把项目托管到GitHub 说明:本文主要介绍如何把一个OC项目托管到Github,重操作轻理论. 第一步:先注册一个Github的账号,这是必须的 注册地址:Github官网注 ...

  8. iOS开发网络篇—使用ASI框架进行文件下载

    iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYView ...

  9. 02.iOS开发网络篇—HTTP协议

    iOS开发网络篇-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  10. Hololens开发入门篇-郑洪智-专题视频课程

    Hololens开发入门篇-572人已学习 课程介绍         本课程使用Hololens模拟器,基于Unity2017.2及Visual Studio 2017开发 课程收益     学会Ho ...

最新文章

  1. oracle迁移mysql视图中函数问题,mysql中to_char自定义函数。
  2. linux c 头文件,linux下的头文件 及C/C++头文件 一览表
  3. Oracle 触发器(上)
  4. 手机ppt怎么添加页码_全网超详细的操作教程,手把手教你使用高效PPT小技巧!...
  5. CSDN挑战编程——《金色十月线上编程比赛第一题:小女孩数数》
  6. 开源网管工具 Cacti,Nagios,Zabbix 比较
  7. python实现将android手机通讯录vcf文件转化为csv
  8. 传统路径规划算法介绍
  9. PowerDesigner如何自定义报表模板
  10. excel单元格内容拆分_EXCEL拆分单元格中的姓名,这都不叫事儿
  11. 【Android视频 之 阿里云视频播放器 二】
  12. 全国计算机等级考试四级考试大纲,全国计算机等级考试四级考试大纲
  13. Windows下双显示器截屏方法
  14. 我的世界java萌新须知_我的世界新手入门攻略 萌新前期注意事项
  15. 诺贝尔奖得主费曼大神教你如何学习
  16. F1赛道 - Bahrain International Circuit | 巴林国际赛道
  17. 02-02-JS-jQuery-HTTP-Servlet
  18. CSS复仇者联盟立体盒子
  19. 114.Spark大型电商项目-广告点击流量实时统计-使用高性能方式将实时计算结果写入MySQL中
  20. 2022PTA天梯赛-全国总决赛试题(个人python解题记录)(更新中)

热门文章

  1. 设计一个递归算法释放二叉树bt中的所有结点(二叉树采用二叉链表存储结构)
  2. 虚拟机镜像xp\win7\win10\win8\win2003,免安装系统,下载即用
  3. winfrom实现,斑马Gk888t打印机,连续打印二维码
  4. oracle数据库面试题及答案
  5. 二次规划(QP)与OSQP求解器
  6. Datalogic得利捷扫码器助力生产与物流自动化!
  7. mysql配置文件在哪_windows下的mysql配置文件在哪
  8. 基于KNX技术设计的智能照明控制系统在医院的设计与应用
  9. 英特尔固态硬盘测试软件,SSD固态硬盘检测测试软件(Intel SSD Toolbox)
  10. Unity制作自适应透明背景(PC端)