激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - IOS - NSString屬性何時用strong何時用copy?

NSString屬性何時用strong何時用copy?

2021-02-23 14:35iOS開發網 IOS

相信各位iOS開發者們都考慮過這個問題,平時寫NSString的屬性時都用copy,那strong要何時用呢?下面這篇文章就來看一下什么時候應該用copy,什么時候應該用strong。有需要的朋友們可以參考借鑒,下面來一起看看吧。

<strong>前言

我們在聲明一個nsstring屬性時,對于其內存相關特性,通常有兩種選擇(基于arc環境):strong與copy。那這兩者有什么區別呢?什么時候該用strong,什么時候該用copy呢?讓我們先來看個例子。

代碼驗證

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@property (nonatomic, strong) nsstring *mystrongstring;
@property (nonatomic, copy) nsstring *mycopystring;
- (void)stringtest {
 nsmutablestring *mutablestr = [nsmutablestring stringwithformat:@"https://"];
 self.mystrongstring = mutablestr;
 self.mycopystring = mutablestr;
 nslog(@"mutablestr:%p,%p", mutablestr,&mutablestr);
 nslog(@"strongstring:%p,%p", _mystrongstring, &_mystrongstring);
 nslog(@"copystring:%p,%p", _mycopystring, &_mycopystring);
 //---------------分割線---------------------
 [mutablestr appendstring:@"devthinking.com"];
 nslog(@"strongstring:%p,%p", _mystrongstring, &_mystrongstring);
 nslog(@"copystring:%p,%p", _mycopystring, &_mycopystring);
}

打印日志如下:

?
1
2
3
4
5
2016-11-09 14:14:18.532 democollectoc[92929:1731791] mutablestr:0x60800026fe00,0x7fff549c9be8
2016-11-09 14:14:18.532 democollectoc[92929:1731791] strongstring:0x60800026fe00,0x7ff095402308
2016-11-09 14:14:18.533 democollectoc[92929:1731791] copystring:0x6080004234a0,0x7ff095402310
2016-11-09 14:14:18.533 democollectoc[92929:1731791] strongstring:0x60800026fe00,0x7ff095402308
2016-11-09 14:14:21.039 democollectoc[92929:1731791] copystring:0x6080004234a0,0x7ff095402310

結論

     1.mystrongstring跟mutablestr的指向地址始終一樣,都為0x60800026fe00,mycopystring跟mutablestr指向的地址不同,即為深copy,新開辟了一份內存;

     2.賦值時,當原始字符串是mutable string時,存在此差異,當mutablestr變化時,mystrongstring會隨著改變,而mycopystring則不會。通常我們不想讓其隨著改變,故用copy屬性較多;如果我們想其隨著改變,則用strong。

     3. 如果原始賦值字符串為string時,則用copy和strong屬性是一樣的。

變量存儲地址

  1. &取地址符,取出來的是變量的存儲地址,如mystrongstring mycopystring是存在堆里的,地址以0x7ff09開頭,mutablestr為臨時變量,是存在棧里的,以0x7fff5開頭。
  2. 直接p打印出來的地址,則是存儲內容實際存在的地址,其實里面存儲的還是地址,詳細的請看下一節,但是我們可以用這個地址區間來判斷存儲的區域。

附:x/3gx查看對象內存

查看基本數據類型的內存時,可直接查看,16進制轉化一下就可以,查看對象時,則不可以,這跟string的結構體是相關的:

NSString屬性何時用strong何時用copy?

以nsstring為例

?
1
nsstring *str = @"a";

先打印出地址:

?
1
2
(lldb) p str
(__nscfconstantstring *) $0 = 0x0000000109b3aa30 @"a"

再用x/3gx命令查看內存:

?
1
2
3
(lldb) x/3gx 0x0000000109b3aa30
0x109b3aa30: 0x000000010bf3e348 0x00000000000007c8
0x109b3aa40: 0x0000000109b276db

再查看0x0000000109b276db中的地址即為字母a的ascii碼實際存在地址:

?
1
2
(lldb) p (char*)0x0000000109b276db
(char *) $2 = 0x0000000109b276db "a"

可以直接在變量上右鍵上打開view memory of “*str”, 這就打開memory查看,在address里面輸上0x0000000109b276db,即可查看每個字節的內容。

NSString屬性何時用strong何時用copy?

總結

以上就是這篇文章的全部內容,希望本文的內容對各位ios開發者們能有所幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

延伸 · 閱讀

精彩推薦
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
主站蜘蛛池模板: 一色屋任你操 | 99re热精品视频 | 国产人成精品一区二区三 | 欧美日韩国产成人在线观看 | 182tv成人福利视频免费看 | 高清国产午夜精品久久久久久 | 91久久国产综合久久91精品网站 | 国产小视频在线 | 在线成人一区二区 | 成年人高清视频在线观看 | 激情久久精品 | 日本在线播放一区二区三区 | 精品av在线播放 | 91精选视频在线观看 | 涩涩天堂 | 黄色av片在线观看 | 欧美日韩国产成人在线 | 色av综合在线 | 久久精品视频一区 | 国产69精品久久久久久 | 91短视频在线观看免费最新 | 色七七网站 | 国产亚洲精品久久久久5区 99精品视频在线 | 成人资源在线观看 | 99爱视频在线观看 | 毛片在线免费观看视频 | 老司机免费福利午夜入口ae58 | 日日艹夜夜艹 | 欧美日韩亚洲另类 | 九色新网址 | av电影在线播放 | 日本aⅴ在线 | 久久精品久久精品国产大片 | 成人黄色免费视频 | 国产在线精品一区二区夜色 | 久久久久久久久久久综合 | 亚洲人成在线播放网站 | 国产成人精品区一区二区不卡 | 精品一区二区三区日本 | 欧美午夜网| 亚洲国产馆 |