[問題] objective-c 新手指標請教

看板MacDev作者 (一片小蛋糕)時間8年前 (2016/08/31 01:58), 8年前編輯推噓1(109)
留言10則, 4人參與, 最新討論串1/1
知道指標是回傳記憶體位置 但是下面的code有點不了解 MyTime *time = [[MyTime alloc] init]; 這段我大概懂,要求一段記憶體存放MyTime物件,用time指著那個記憶體. time.hour = 10; 這段我就比較不懂,我知道是想要宣告hour=10 可是為什麼不是 *time.hour = 10; ___________ 再讀了一些資料了解到objective-c 物件的傳遞訊息特性。 不過還是有些地方不了解 如果一般宣告pointer int a = 10; int *b = &a; (這可以分解成int *b; b=&a) *b == 10; b == 0x00001 上述應該是沒有錯誤吧? 那麼一開始的問題如果已經用*time宣告time是一個地址變數了 那為何之後不是*time.hour=10 或是[*time setHour:10] time裡面不是只有地址而已嗎?要找到setHour不是應該是要*time找到地址對應的值setH our才能傳訊息嗎? 還是說object的pointer比較不一樣? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.241.102.252 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1472579939.A.349.html

08/31 04:45, , 1F
Objective-C object 的 dot notation 不是指標存取, 是
08/31 04:45, 1F

08/31 04:46, , 2F
特殊語法, 在這裡對等於 [time setHour:10]
08/31 04:46, 2F

08/31 04:50, , 3F
http://d.pr/15F45 這裡有幾個例子和建議
08/31 04:50, 3F

08/31 09:57, , 4F
謝謝樓上
08/31 09:57, 4F

08/31 10:10, , 5F
我研究看看..
08/31 10:10, 5F
※ 編輯: wrt (39.10.70.106), 08/31/2016 11:39:52 ※ 編輯: wrt (39.10.70.106), 08/31/2016 11:41:01

08/31 12:15, , 6F
因為再底層是呼叫objc_msgSend(id self, SEL op, ...);
08/31 12:15, 6F

08/31 12:17, , 7F
而id本身就是一個指向 object 的指標
08/31 12:17, 7F

08/31 12:45, , 8F
btw, *time.hour shoulde be (*time).hour
08/31 12:45, 8F
意思是(*time).hour或time.hour都是一樣的? ※ 編輯: wrt (39.10.70.106), 08/31/2016 14:20:10

09/01 02:56, , 9F
For lang C, (*time).hour == time->hour != *time.hour
09/01 02:56, 9F

09/01 02:57, , 10F
*time.hour is *(time.hour) you will dereference hour
09/01 02:57, 10F
文章代碼(AID): #1NnSbZD9 (MacDev)
文章代碼(AID): #1NnSbZD9 (MacDev)