到這里全部真相大白了,說明我們的copy修飾的array進行了淺拷貝,我們知道只有當不可變對象使用copy時才是淺拷貝,那我們copy修飾的是一個可變數組,賦值的是一個不可變數組。
創新互聯公司是一家專業提供伊吾企業網站建設,專注與做網站、成都做網站、HTML5建站、小程序制作等業務。10年已為伊吾眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。
分析:strstr2地址相同并且與str3地址不同,NSString的copy是淺拷貝,且copy返回的對象是不可變對象;mutableCopy是深拷貝。
通俗解釋:深拷貝是內容拷貝,淺拷貝是地址拷貝 區別點:深拷貝會創建一個新的內存空間,拷貝的值是一樣的,但是內存地址不一樣。
原因:這里的copy是淺拷貝,并沒有生成新的對象 由上面的例子可以得出:但是,我們一般聲明NSString時,也不希望它改變,所以一般情況下,建議使用 copy ,這樣可以避免NSMutableString帶來的錯誤。
淺拷貝:修改堆內存中的同一個值。深拷貝:修改堆內存中的不同的值。
copy: 用于希望保持一份傳入值的拷貝,而不是值自身的情況,即把原來的對象完整的賦值到另外一地方,重新加載一內存區,一個地方變了不影響另一個地方的對象。
NSString title;什么是assign,copy,retain之間的區別?assign:簡單賦值,不更改索引計數(Reference Counting)。
copy是創建一個新對象,retain是創建一個指針,引用對象計數加1。Copy屬性表示兩個對象內容相同,新的對象retain為1 ,與舊有對象的引用計數無關,舊有對象沒有變化。copy減少對象對上下文的依賴。
系統默認屬性是assign。retain是指針的復制,copy是內容的復制原子性修飾符:atomic nonatomicatomic:表示是線程安全的。nonatomic:表示是非線程安全的,使用此屬性性能會提高一些。
原來簡單解釋過屬性定義(Property),并且提起了簡單的retain,copy,assign的區別。那究竟是有什么區別呢?assign就不用說了,因為基本上是為簡單數據類型準備的,而不是NS對象們。
學習資料 首先iOS拷貝可以區分為 深拷貝 和 淺拷貝 。 淺拷貝 :拷貝了對象的指針,可以理解為給一條狗加了一條繩子。 深拷貝 :直接拷貝對象到另外一塊內存地址中,可以理解為新買了一條狗。
淺拷貝就是拷貝指向原來對象的指針,使原對象的引用計數+1,可以理解為創建了一個指向原對象的新指針而已,并沒有創建一個全新的對象。
用copy修飾的屬性,在setter時,會先調用傳入對象的copy方法得到一份拷貝后再retain,但不同的對象調用copy方法,可能是深拷貝也可能是淺拷貝,如果是淺拷貝,則兩個指針指向一個內存,舊對象引用計數會加1。
深拷貝 :內容拷貝,拷貝數據到一塊新內存區域,指針指向拷貝的數據區 strong: 淺拷貝,也就是指針引用,很明顯的。我們來測試一下 運行結果如下,實際對象是一致的。
在llvm層,其實對 copy 屬性做了編譯器優化,之后才會調用 objc 中的 objc_setProperty_xxx 方法。
到這里全部真相大白了,說明我們的copy修飾的array進行了淺拷貝,我們知道只有當不可變對象使用copy時才是淺拷貝,那我們copy修飾的是一個可變數組,賦值的是一個不可變數組。
為了避免可變對象找不到方法crash,或者不可變對象被篡改,iOS中的不可變對象、容器一般都使用copy修飾符,保證setter方法中對傳入的新對象調用copy方法。
block 本質上是一個OC對象,內部有個 isa 指針,可以用 retain/strong/copy 等修飾詞修飾。但是 block 在創建的時候內存默認分配在棧上,而不是堆上的。
copy與strong類似。不同之處是strong的復制是多個指針指向同一個地址,而copy的復制每次會在內存中拷貝一份對象,指針指向不同地址。copy一般用在修飾有可變對應類型的不可變對象上,如NSString, NSArray, NSDictionary。
可以看到我們修改strCoptTest,拷貝對象也被修改了。
copy與strong類似。不同之處是strong的復制是多個指針指向同一個地址,而copy的復制每次會在內存中拷貝一份對象,指針指向不同地址。copy一般用在修飾有可變對應類型的不可變對象上,如NSString, NSArray, NSDictionary。
copy是創建一個新對象,retain是創建一個指針,引用對象計數加1。Copy屬性表示兩個對象內容相同,新的對象retain為1 ,與舊有對象的引用計數無關,舊有對象沒有變化。copy減少對象對上下文的依賴。
也就是說,retain 是指針拷貝,copy 是內容拷貝。strong,weak 用來修飾屬性。
網站欄目:ios開發屬性copy 開發者選項內容
文章分享:http://vcdvsql.cn/article23/dijohcs.html
成都網站建設公司_創新互聯,為您提供微信小程序、網站導航、網站設計公司、ChatGPT、企業建站、域名注冊
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯