作者whitefur (白毛)
看板MacDev
標題Re: [問題] 新手一個問題
時間Sat Oct 5 20:27:10 2013
首先你要知道 "=" 的意思
"=" 叫做assign
Objective-C裡面的物件的變數都是指標
這也是為什麼NSString* string會有一個星號
星號代表宣告的變數為指標
指標事實上就是存著一個記憶體位置 ex:0x0010cb54
而"=" 就是把右邊的值 assign給左邊的變數
這裡給你一個口訣
「右邊指到哪裡,左邊就指到哪裡」
以下這兩行來說
1.NSString *string = [[NSString alloc] init]
2.string = @"abc"
在執行完1.的時候你把string印出來看看
然後再2.之後再把他印出來看看
兩者的位置是不一樣的
因為1.時, string指到的是 init後return的位置
2.之後, 因為"="的作用
所以string指到的位置改變了
指到了@"abc" return的位置
而@"acb"這種產生字串的方式
compiler只會產生一個"abc"字串
在整個程式碼裡面
只要你是寫
NSString *str = @"abc";
NSString *str2 = @"abc";
都會指到同一個位置
「右邊指到哪裡,左邊就指到哪裡」
※ 引述《lazyasa (asa)》之銘言:
: 各位大大好
: 因為覺得觀念不太好
: 又重新去做了一些練習
: 然後有一個地方搞不懂
: NSString *string = @“abc”;
: 跟
: NSString * string = [[NSString alloc] init];
: string = @"abc";
: 有兩個什麼不一樣呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 36.232.218.100
→ ck574b027:是我左右不分嗎?我怎麼覺得講反了? 10/06 02:38
→ whitefur:阿抱歉,是我打錯了 已修正 10/06 10:19
※ 編輯: whitefur 來自: 36.232.220.221 (10/06 10:20)
推 lazyasa:謝謝W大,懂了 :) 10/06 20:12
推 TsaoCCFGOGO:推這篇,深入淺出! 10/07 07:57