基于Objective-C的iOS开发--入门篇
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];
- 1
- 2
- 3
- 4
- 5
- 打印日志
NSLog(@"Hello, World!"); // @ 是为了和C字符串区分,表示NSString 字符串
- 1
- 判断文件是否存在
// 取得沙盒目录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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 应用沙盒
- 每个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
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
参考:
[1]
[2]
[3]
[4]
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;}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
由于xcode版本的不同,具体的xcode界面可能会和参考博文有所不同,但是思路是大致相同的。
参考:
[1]
[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]
[2]
4、LLDB调试
- bt: 查看堆栈信息
- image lookup --type [name] :查看类型
- image lookup --name :查看方法信息文件位置等
- d: 反汇编当前目标中的指定命令,默认为当前函数
- up: 查看上一步的堆栈调用信息
- frame select [number] : 跳转至指定堆栈查看,源码和汇编(系统的或打包的),定位某个方法的具体实现。
参考:
[1]
5、ios应用启动流程
- 解析Info.plist
- Mach-O(可执行文件)加载
- app的二进制文件内部的所有方法和函数调用,都有一个在当前二进制文件中的偏移地址。运行时(加载到内存),每次系统都会随机分配一个ASLR(Address Space Layout Randomization,地址空间布局随机化)地址值,如果想访问二进制文件中的某个方法,只需要ASLR+偏移值找到运行时的内存地址。
- 程序执行
- pre-main阶段
- main阶段
- 调用main函数
- 调用UIApplicationMain()
- 调用applicationWillFinishLaunching
- 调用didFinishLaunchingWithOptions:完成初始化,并展示首页
参考:
[1]
6、关于代码阅读
- :