self
是什麼樣的東西?將它稱爲指針是否正確?或者它是一個變量?還有什麼?自己是一個指針嗎?
4
A
回答
15
Objective-C方法的實現實際上只是一個C函數,它需要兩個額外的參數。第一個參數是self
變量,第二個參數是用於調用實現的選擇器。第三個和任何後續的參數(如果有的話)是您的方法的實際參數。如果你有這樣的方法:
@implementation MyClass
- (int) myMethod:(int) anArg
{
NSLog (@"The selector %@ was used.", NSStringFromSelector(_cmd));
return [self someValue] + anArg;
}
@end
然後,大致相當於這個:
// Implementation of MyClass's instance method "myMethod"
int MyClass_myMethod (id self, SEL _cmd, int anArg)
{
NSLog (@"The selector %@ was used.", NSStringFromSelector(_cmd));
return [self someValue] + anArg;
}
但是要記住,在調用C函數和發送郵件有很大的不同。向對象發送消息將導致調用實現,並且該實現由運行時決定。由於方法實現是在運行時確定的,因此編譯器不能簡單地使用直接函數調用交換所有消息發送。我相信有一些方法可以告訴運行時改變給定類的給定選擇器使用哪種方法實現。
運行時間根據self
的類確定使用哪個實現。如果self
是nil
,則發送消息是無操作的,因此,所有方法實現在運行時調用它們時將始終具有有效值self
。
2
2
像所有對象的指針!
5
self
實際上是定義在NSObject
:
- (id)self;
所以self
是id
類型,而這又是在Objective-C的運行時定義的:
typedef struct objc_object {
Class isa;
} *id;
所以,是的,self
只是一個指向Objective-C對象的指針。
有關更多信息,請參閱init method的文檔。
相關問題
- 1. 這個指針是一個r值嗎?
- 2. 改變自己的指針
- 3. C++ - 數組是一個指針嗎?
- 4. 指針指向自己沒有typecast?
- 5. C++智能指針自己的實現
- 6. 是一個常量字符指針,指向一個常量字符或指向字符的常量指針嗎?
- 7. 是一個指向STL容器安全的指針嗎?
- 8. 指令指針是一個程序可見的寄存器嗎?
- 9. 如何定義一個可以返回指向自己的指針的函數?
- 10. 我應該使用std :: shared指針傳遞一個指針嗎?
- 11. PHP - 可以返回一個指針嗎?
- 12. 爲什麼說一個2維數組是一個「指向指針的指針?」
- 13. 給自己分配一個對象是個好主意嗎?
- 14. 是否有可能有一個指針指向第一個指針所指向的變量的指針?
- 15. 如何鍵入一個函數指針,該函數指針將自己的類型的函數作爲參數?
- 16. 單表繼承是指一個子類有自己的領域
- 17. 嚴格的指針別名:是通過一個'易失性'指針訪問一個解決方案嗎?
- 18. 一個類內的指針可以指向這個嗎?
- 19. 數組名稱是C++中的一個常量指針嗎?
- 20. C++刪除一個指針指針
- 21. JNA:指針的指針到一個struct
- 22. 一個指針數組的指針
- 23. 轉換*&只是一個指針
- 24. 這是一個懸掛指針?
- 25. 只有當它是一個指針
- 26. 這是一個指針嗎? (如果是這樣,它是如何初始化的?)
- 27. 我們可以說指針值指定了一個對象嗎?
- 28. 函數可以返回一個指向NULL的指針嗎?
- 29. 傳遞一個結構體和結構體的指針有什麼區別,他們不是兩個指針嗎?
- 30. 一個類可以包含一個自己的列表嗎?
自己是一個指針在objective-c ...檢查這個artcle http://cocoabugs.blogspot.com/2011/02/understanding-your-objective-c-self.html – 2011-02-21 06:02:16