1. 程式人生 > >NSString的屬性修飾使用copy和strong的區別

NSString的屬性修飾使用copy和strong的區別

一、不可變字串屬性、

@property (nonatomic,strong)NSString *strongedString;

@property (nonatomic,copy)NSString  *copyedString;

     
1、當源不可變字串改變時
     使用srong修飾的屬性由於取得的還是源不可變字串地址、其值會跟隨源字串改變而改變。
     使用copy修飾的屬性進行了淺拷貝、還是源不可變字串的地址、其值會跟隨源字串改變而改變。
   
2、當源可變字串改變時
    使用srong修飾的屬性由於取得的還是源不可變字串地址、其值會跟隨源字串改變而改變。
    使用copy修飾的屬性由於進行了深拷貝、取得了另一份記憶體地址、其值不會跟隨著改變。

二、可變字串屬性

@property (nonatomic,strong)NSMutableString *strongedString;

@property (nonatomic,copy)NSMutableString  *copyedString;

1、源字串為不可變字串時

     使用srong修飾的屬性由於取得的地址改變、源字串不可變、其值不會跟隨源字串改變而改變。
     使用copy修飾的屬性進行了深拷貝、源字串不可變,其值不會隨著字串改變而改變。且copyedString為不可變字串。對其使用appendString方法會造成閃退。

2、源字串為可變字串時

  使用strong修飾的屬性的地址跟隨源字串地址、源字串可變、其值改變。

   使用copy修飾的屬性進行深拷貝、改變了地址、且為不可變字串。使用appendString方法會造成閃退。

可變字串屬性理解感覺不到位、待考究....

相關推薦

NSString屬性修飾使用copystrong區別

一、不可變字串屬性、 @property (nonatomic,strong)NSString *strongedString; @property (nonatomic,copy)NSString  *copyedString;       1、當源不可變字串改變時

ios-關於深拷貝淺拷貝屬性中的copystrong區別

深拷貝就是把內容拷貝一份產生一份新的物件,新物件計數器為1,源物件計數器不變。而淺拷貝是指標拷貝,把地址給你,你和我指向同一個物件,源物件計數器加一,源物件和副本的計數器相同。我們知道在OC中的拷貝函式有copy和mutablecopy,只要你呼叫了copy不管是NSStri

深拷貝與淺拷貝;copy與mutableCopy;容器型別的深拷貝;copystrong

一、分成三組對比NSMutableDictionary與NSDictionary;NSMutableString與NSString;NSMutableArray與NSArray分別呼叫copy和mutableCopy方法,檢視對應的物件的地址值判斷深淺拷貝; 1、字典:

修飾屬性使用Copy與使用Strong區別?

NSString使用Copy與使用Strong屬性的區別? 宣告一個不可變的字串物件,不管是Strong還是Copy屬性的物件,指向的地址都是同一個原來String指向的地址。 如在MRC環境,輸出String的引用計數,會看到其引用計數值是3,即Strong操作和Copy操作都會使原字串物

NSArray、NSDictionary、NSString 修飾copystrong區別

NSArray、NSDictionary、NSString同理 NSArray的修飾符使用strong時,如果用可變陣列給其賦值,會出現可變陣列改變時,array也會改變的情況 這顯然是不希望出現的 但是使用copy將不會出現此問題 NSMutableArra

NSString屬性什麼時候用copy,什麼時候用strong?

看到一篇很不錯的文章,分享推廣哈,原文轉自http://www.cocoachina.com/ios/20150512/11805.html 我們在宣告一個NSString屬性時,對於其記憶體相關特性,通常有兩種選擇(基於ARC環境):strong與copy。那這兩者有什麼區別呢?什麼時候

java中介面的屬性、方法的預設修飾類的屬性、訪問修飾符的區別

介面中的屬性的預設是public static final 、方法是public abstract 類的成員變數或成員方法宣告為預設許可權,則其是包級可見,同一個包內的類可以訪問到這個屬性或方法fri

CSS 屬性 - 偽類偽元素的區別

習慣 div 個人觀點 養成 pseudo line 現象 let first 先說一種我們寫CSS時候常見的現象,::before和:after中雙冒號和單冒號會在寫CSS中經常看到。為什麽會有單冒號跟雙冒號兩種寫法呢? 其實主要是為了區分偽類和偽元素 偽類:偽類用於

synchronized修飾方法對象的區別

關系型 target volitile 個數 同步 知識庫 樂觀鎖 title 調用 使用synchronized(object) { 代碼塊.... } 能對代碼塊進行加鎖,不允許其他線程訪問,其的作用原理是:在object內有一個變量,當有線程進入時,判斷是否為0,如果

Python 中copydeepcopy的區別

deepcopy 改變 般的 blog 等於 div copy clas 但是 import copy 假設在python中對list的復制 copy稱為淺復制 deepcopy稱為深復制 淺復制和深復制在一般的list中作用是相同的,都是進行一個復制 但是在list嵌套l

block要用copy修飾,還是用strong

csdn tps http https AC ron 而不是 nbsp 崩潰 棧區與堆區 block本身是像對象一樣可以retain,和release。但是,block在創建的時候,它的內存是分配在棧(stack)上,而不是在堆(heap)上。他本身的作於域是屬於創建時

總結Jquery中獲取自定義屬性使用.attr().data()以及.prop()的區別

p.p1 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px ".PingFang SC" } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC" } p.p3 { margin:

知識點:可變陣列的屬性使用copy修飾的後果

問題 視訊What's New in LLVM 中,從12:05的時間開始有個關於NSMutableArray可變陣列屬性的使用問題。 執行後報錯圖如下: 分析 self.photos的實際型別是 __NSMutable0,也就NSArray型別。沒有addObject的方法。 進一步探討

《隨筆四》——C#中的 “ 索引器屬性的相同點不同點、索引器與陣列的區別、索引器的過載 ”

目錄 索引器和屬性的相同點和不同點 索引器與陣列的區別 索引器的過載 關於索引器的詳細請看這裡《隨筆三》——C#中的“ 索引器”  https://blog.csdn.net/qq_34536551/article/details/83926260 索引器(

終於明白word-break屬性——break-allbreak-word的區別

      其實一直不明白,也沒有認真去想過 word-break 屬性的 break-all 和 break-word 有什麼區別   後來看了一個大神寫的一篇部落格,寫得很詳細,看了豁然開朗。   所以,我也就不在過多贅

java許可權修飾符defaultprotected區別

java一共有4中許可權修飾符,分別是private、default、protected和public private和public很好理解,default和protected不太好分清。 protected 包內所有類可見,包外有繼承關係的子類可見 default表示

vuex this.$store.state.屬性mapState的屬性中的一點點區別

做泰康公眾號的專案時候有一個需求建立公眾號的時候後臺有一個社群id提供給後臺展現人員和部門,在群發訊息時候也要給後臺一個社群id只不過獲取社群的id介面和上一個不是一樣的,本來在頁面中寫了兩個select,一個是用elementUI的select選擇器,另一個是在標籤選擇器,現在在建立公眾號時使用公眾號社群的

NSTaggedPointerString,__NSCFConstantString,__NSCFStringNSString的關係?NSString為什麼用copy?各種型別的stringcopy

​​​​問題引入: 一.各型別字串的關係和儲存方式 NSString和NSMutableString相信我們平時都用過n遍了,但NSString真的都是一個儲存在堆區的物件嗎?如果在不同區,對它們進行copy操作,記憶體地址又會是什麼樣呢? 幾個需要注意的點: 記憶體

jQueryjs一些標籤屬性的獲取修改方法以及區別

因為自己總是在jQuery和js寫function的時候,總是把兩者之間混淆,一直想總結以下這2這區別和使用的方式,所以就查了下,再加上了自己平時記錄的,總結下,為了下次自己再次混淆的時候可以直接看自己的部落格查詢,同時也給大家提供便利,以下有轉載的部分,我已經提供了出處,

Java中static修飾的方法非static修飾的方法的區別

在Java中有一個static修飾符,可以用來修飾方法和變數 我們都知道static修飾的方法時靜態方法,那麼靜態方法和普通方法有什麼區別? 簡單點說static修飾的方法可以直接用類名呼叫,也可以例項化物件呼叫: class A{ public static void