iOS開發快速入門教程 3 11節 3 16節

2021-06-27 15:57:04 字數 2095 閱讀 9494

繼承某個類,用#import,包含被引用類的變數和方法,效率低

只是定義成員變數、屬性,用@class,效率高

需要用到變數和方法,可以在.m檔案中用#import 

迴圈引用,用@class,用#import報錯

當檔案大量#import同乙個檔案,當這個檔案改變,所有引用這個檔案的類都要重新編譯

引數主要分為3類:

讀寫屬性:readwrite(預設)/readonly

setter處理:assign(預設)/retain/copy

原子性:atomic(預設)/nonatomic

retain:在setter方法中,release舊值,retain新值

atomic:代表給方法加鎖,保證執行緒安全

nonatomic:代表方法不考慮執行緒安全問題,禁止多執行緒,變數保護,提高效能

weak相當於assign

strong相當於retain

自動釋放池 autorelease pool

自動釋放池是oc裡邊的一種記憶體自動**機制,一般可以將一些臨時變數新增到自動釋放池中,統一**釋放

當自動釋放池銷毀時,池裡邊的所有物件都會呼叫一次release方法

oc物件只需要傳送一條autorelease訊息,就會把這個物件新增到最近的自動釋放池中(棧頂的釋放池)

autorelease實際上只是把對release的呼叫延遲了,對於每一次autorelease,系統只是把該物件放入了當前的autorelease pool中,當該pool被釋放時,所有物件呼叫release方法

靜態方法返回的物件都是自動釋放

靜態方法不能訪問物件的成員變數

注意:1.在arc下,不能使用[[nsautorelaesepool alloc] init],而應當使用@autoreleasepool

2.不要把大量迴圈操作放到同乙個自動釋放池中,這樣會造成記憶體峰值上公升

3.盡量避免對大記憶體使用該方法,對於這種延遲釋放機制還是盡量少用

4.sdk中一般利用靜態方法建立並返回的物件都是已經autorelease的,不需要再進行release操作

檔名:類名+分類名稱 

類名:表示繼承

類名 ()表示分類

oc中提供了category,可以動態的為已經存在的類新增新的方法,不能增加成員變數

使用category對類進行擴充套件時,不需要建立自雷

category使用簡單的方式,實現了類的相關方法的模組化,把不同的類方法分配到不同的分類檔案中

category使用場景:

1.在定義類使的某些情況下(如需求變更)可能要為其中的某個類新增新的方法

2.乙個類中包含了許多不同種類的方法需要實現,而這些方法需要不同團隊的成員實現

3.在使用基礎類庫中的類時,有可能希望這些類實現一些自己需要的方法:比如寫個nsstring+json

簡單來說就是一系列方法的列表,其中宣告的方法可以被任何類實現,這種模式成為**(delegation)模式

在ios和os x開發中,採用了大量的**模式來實現mvc中view和controller的解耦

<>代表實現某個協議

@required表示必須實現的方法,預設為required但如果沒實現,編譯器也不會報錯

@optional表示可選(可實現,可以不實現)

conformstoprotocol:@protocol(***)判斷某個物件是否遵守***協議

respondstoselector:@selector(***)判斷某個物件是否實現***方法

^表示是block

block封裝了一段**,可以在任何時候執行

block可以作為函式引數或者函式的返回值,而其本身又可以帶輸入引數或返回值。它和傳統的函式指標類似,但區別是:block是inline(內聯函式)的,並且預設情況下對區域性變數是唯讀的

如果外部變數用了__block關鍵字進行宣告,就可以在block內部修改這個變數

block多用於多執行緒、非同步任務、集合遍歷、集合排序、動畫過渡

block和指向函式的指標只有符號區別(^),(*)

@public

@protected 預設 子類可以訪問,外界不能訪問

@private子類不能訪問

->直接訪問成員變數

iOS開發入門教程 iPhone開發相關學習資料

首先建議閱讀 你可以對 ios 開發有個總體的認識。該文章也有官方的 程式語言 learn objective c 這也是廣受推薦的乙份文件,短小精練,適合入門。programming in objective c 2.0 原書已經出到第四版了,建議閱讀原版,中文版是根據第二版翻譯的。此書比較適合入...

matplotlib快速入門教程

matplotlib是乙個python的2d的繪相簿,通過使用matplotlib我們只需要幾行簡潔的 就可以繪圖,直方圖 功率譜 條形圖 錯誤圖 散點圖等。這篇部落格主要介紹的是matplotlib.pyplot模組,matplotlib其實就是乙個模仿matlab開發的python庫。當然,它不...

Linux快速入門教程

序言 linux是一套免費使用和自由傳播的類unix作業系統,這個系統是由全世界各地的成千上萬的程式設計師設計和實現的。下面的一些linux教程是為了快速入門,目的在於能快速掌握linux的基本知識,能對伺服器進行基本的維護。1.1 命令列操作 1.1.1 shell 簡介 1.1.2 shell ...