我涉足越狱开发/调整,我已经知道这是违反苹果的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