日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Objective-C的iOS开发--入门篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于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开发--入门篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。