irpas技术客

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

网络投稿 1667

基于Objective-C的iOS开发--入门篇 1、Objective-C 基础2、ios开发环境搭建3、CocoaPods4、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 cocoapodsRuby文件扩展名是.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.plistMach-O(可执行文件)加载 app的二进制文件内部的所有方法和函数调用,都有一个在当前二进制文件中的偏移地址。运行时(加载到内存),每次系统都会随机分配一个ASLR(Address Space Layout Randomization,地址空间布局随机化)地址值,如果想访问二进制文件中的某个方法,只需要ASLR+偏移值找到运行时的内存地址。 程序执行 pre-main阶段main阶段 调用main函数调用UIApplicationMain()调用applicationWillFinishLaunching调用didFinishLaunchingWithOptions:完成初始化,并展示首页 参考: [1] iOS应用的启动流程和优化详解 6、关于代码阅读 画流程图UML 类图、时序图: 在线画图在线画图2


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #ObjectiveC #iOS #基础1ObjectiveC