基于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];
  • 打印日志
 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、关于代码阅读

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值