我涉足越獄開發/調整,我已經知道這是違反蘋果的SDK權利等。我對objective-c相當陌生,並且不確定如何訪問指向值的指針。這裏是頭功能:如何訪問指向id對象的指針的指針?
- (id)_newCKSMSMessage:(id *)arg1;
我已經試過多次嘗試獲取訪問Arg1的值:
id msg = &arg1;
id *msg = &arg1;
如何通過ARG1訪問值是指針?
我涉足越獄開發/調整,我已經知道這是違反蘋果的SDK權利等。我對objective-c相當陌生,並且不確定如何訪問指向值的指針。這裏是頭功能:如何訪問指向id對象的指針的指針?
- (id)_newCKSMSMessage:(id *)arg1;
我已經試過多次嘗試獲取訪問Arg1的值:
id msg = &arg1;
id *msg = &arg1;
如何通過ARG1訪問值是指針?
我覺得你有另外一個問題,你不知道你有。
該方法的參數極有可能是而非有效對象。當你看到一個指向對象的指針時,這幾乎總是一個「通過引用返回」參數。調用者傳入一些變量的地址,並且該方法應該將該變量設置爲某個對象。例如:
- (void)tellMeHello:(id *)message {
if (message) {
*message = @"Hello!";
}
}
// It's used like this:
id thisWillBeTheMessage; // it's nothing right now
[someObject tellMeHello:&thisWillBeTheMessage];
NSLog(@"%@", thisWillBeTheMessage); // prints "HELLO!"
我不熟悉這裏討論的方法,但有相當多沒有其他原因,將指針傳遞到一個指向Objective-C的對象AFAIK。
編輯:好的,我只是想到另一個原因:如果你傳遞一個C數組的對象。但那是不常見的。這幾乎只能在幾個NSArray初始化器中完成。這比規則更例外。
這是有道理的,特別是與同名頭文件中的其他方法,如「addMessage」和「setMessage」。謝謝你,這可能爲我節省了幾個小時嘗試錯誤的東西! –
在取消引用指針之前,必須確保它是否爲NULL;
if(NULL != arg1) {
id msg = *arg1;
NSLog(@"msg = %@, [msg class] = %@", msg, NSStringFromClass([msg class]));
}
當你傳遞一個對象來_newCKSMSMessage:(ID *)ARG1你是這樣做的;
id gak = [[Gak alloc] initWithInterestingStuff:interestingStuff];
[something _newCKSMSMessage:&gak];
以'_'開始的方法是不正確的。如果你這樣做,你很可能會與蘋果的私人方法發生衝突。
這是Apple的私有方法之一(來自傾倒標題),並且我試圖掛鉤它,理解arg1,然後返回原始函數。我已經嘗試過id msg = * arg1,但是當我嘗試記錄msg時,我得到__NSCFType。我試着訪問&味精,但這會導致崩潰。我很欣賞這個快速回復 –
你在試圖理解蘋果在那裏做什麼?也許我們應該備份並討論你想要做的事情。如果您使用NSLog(@「%@」,msg)進行日誌記錄,並獲取'__NSCFType',則可以使用其免費橋接對象之一。 –
我想攔截髮件人的號碼到一個傳入的短消息,以便我可以彈出一個回覆框,而不必去MobileSMS.app,然後切換回我當前的應用程序。這對我來說是一個學習過程,更多的是學習如何運作。我不一定需要了解蘋果公司正在做的所有事情,只需要將arg1變成可理解的結構,字典或信息數組。我不確定您的免費橋接對象是什麼意思(對不起,仍然是新的) –
這是根本C.下面是一個例子:
int val = 5;
int* valPtr = &val; //valPtr points to val;
int** valPtrPtr = &valPtr; //valPtrPtr is a pointer to a pointer to val
int newVal = **valPtrPtr; //newVal = 5
比方說,你有一個指向名爲vPtr
指針。無論何時您想要取消參考vPtr,對於某些k,您都使用(**vPtr)
或*vPtr[k]
,對於某些j,k
則使用vPtr[j][k]
。如果使用數組表示法訪問該值,請確保有正確的邊界,否則會出現未定義的行爲。
儘管這應該起作用,我認爲@Chuck指出我的問題超出了指針的基礎知識,並且與蘋果的方式有關正在調用這個方法。謝謝你! –
是不是&
a address of
運算符?
所以id msg = &arg1
將意味着指針arg1
(第三級!)
你應該做id msg = *arg1
'id *'傷了眼睛 – sidyll
@sidyll:有點尷尬,但沒有什麼更好的辦法可以完成同樣的事情,所以我們都必須吮吸它。 – Chuck