assign retain和copy的區別

2022-04-28 20:45:16 字數 524 閱讀 1849

一、assign屬性

當資料型別為int、float等原生型別時,可以使用assign,否則可能導致記憶體洩露。例如當使用malloc分配了一塊記憶體,並把它的位址賦值給了指標a,後來如果希望指標b也共享這塊記憶體,於是講a賦值給(assgin)b。這時就用到了assgin,此時a和b指向同一塊記憶體。但是現在問題出現了,當a不再需要這塊記憶體時,能都直接釋放呢?肯定是不能的,因為a並不知道b是否還在使用這塊記憶體,如果a釋放了,那麼b在使用這塊記憶體的時候引起程式crash掉。

二、retain屬性

retain屬性就是為了解決上述問題而提出的,使用了引用計數(reference counting),還是上面那個例子,我們給那塊記憶體設乙個引用計數,當記憶體唄分配並且賦值給a時,引用計數是1.當把a賦值給b時引用計數增加到2.這時如果a不再使用這塊記憶體,它只需要把引用計數減1,表明自己不再擁有這塊記憶體。b不再使用這塊記憶體時也把引用計數減1.當引用計數變為0的時候,代表該記憶體不再被任何指標所引用,系統可以直接釋放掉。此時系統自動呼叫dealloc函式,記憶體被**。

三、copy屬性

assign retain和copy的區別

一 assign屬性 當資料型別為int float等原生型別時,可以使用assign,否則可能導致記憶體洩露。例如當使用malloc分配了一塊記憶體,並把它的位址賦值給了指標a,後來如果希望指標b也共享這塊記憶體,於是講a賦值給 assgin b。這時就用到了assgin,此時a和b指向同一塊記憶...

assign retain 和copy的區別

assign 對基礎資料型別 nsinteger,cgfloat 和c資料型別 int,float,double,char 等 等.此標記說明設定器直接進 行賦值,這也是預設值。在使 用垃圾收集的應 用程式中,如 果你要 乙個屬性使 用assign,且這個類符合nscopying協 議,你就要明確指...

Dockerfile中的add指令和copy指令

在一次學習中看到的,記錄下來留作筆記。add 源路徑 目標路徑 copy 指令將從構建上下文目錄中 源路徑 的檔案 目錄複製到新的一層的映象內的 目標路徑 位置。使用copy指令,原始檔的各種元資料都會保留。比如讀 寫 執行許可權 檔案變更時間等。這個特性對於映象定製很有用。特別是構建相關檔案都在使...