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

基于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、关于代码阅读

  • :
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发