基于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. DelphiX教程系列 4 - 滚动背景 part 1
  2. python连接mongo数据库
  3. 事件映射 消息映射_映射幻影收费站
  4. VS2013 使用QCustomPlot等三方库如何配置
  5. etmvc mysql乱码_Etmvc学习文档
  6. Centos7默认自带了Python2.7版本,但是因为项目需要使用Python3.x,这里提供一种比较快捷方便的安装方式...
  7. [csu/coj 1632]LCP
  8. 【OpenCV】腐蚀膨胀
  9. MIT“食人花”机器人,能抓起120倍重的物体,软硬皆可,不问形状
  10. 推荐自用黑苹果Clover引导主题
  11. 2019年计算机设计大赛(省赛)
  12. 曾经以为老去是很遥远的事情
  13. 大师放大师傅撒旦法的萨芬
  14. regedit.exe参数说明
  15. 深入理解游戏中寻路算法
  16. B. Diverse Garland
  17. 什么是重载?有什么作用?
  18. 使用百度Clouda框架创建RSS阅读器应用
  19. 用Python实现的Internet电话软件(P2P-SIP)开源
  20. 国三数据库系统工程师与软考中的数据库工程师,谁的难度更高?

热门文章

  1. 斗地主发牌编程PHP,php模拟实现斗地主发牌
  2. Modbus通讯模拟环境的搭建(一) —— Modscan与Modsim的应用
  3. 非合作博弈篇——非合作博弈论问题的表示(strategic form)
  4. 如何使用QXDM 的1477项 转化utc时间
  5. 视易linux进图形界面,视易KTV点歌机系统安装说明.ppt
  6. Latex所有常用数学符号整理
  7. hosts文件作用及如何修改hosts文件
  8. 修改Linux里的hosts文件
  9. [超详细保姆教程]Python3.8 实现 Paillier算法
  10. Javascript——读取json文件方法总结