Iphone 如何访问指向id对象指针的指针?
我涉足越狱开发/调整,我已经知道这违反了苹果的SDK权利等。我对objective-c相当陌生,不确定如何访问指向值指针的指针。下面是header函数:Iphone 如何访问指向id对象指针的指针?,iphone,objective-c,jailbreak,Iphone,Objective C,Jailbreak,我涉足越狱开发/调整,我已经知道这违反了苹果的SDK权利等。我对objective-c相当陌生,不确定如何访问指向值指针的指针。下面是header函数: - (id)_newCKSMSMessage:(id *)arg1; 我已多次尝试访问arg1的值: id msg = &arg1; id *msg = &arg1; 如何访问arg1指针指向的值?在取消引用指针之前,必须确保它是否为NULL if(NULL != arg1) { id msg = *arg1;
- (id)_newCKSMSMessage:(id *)arg1;
我已多次尝试访问arg1的值:
id msg = &arg1;
id *msg = &arg1;
如何访问arg1指针指向的值?在取消引用指针之前,必须确保它是否为NULL
if(NULL != arg1) {
id msg = *arg1;
NSLog(@"msg = %@, [msg class] = %@", msg, NSStringFromClass([msg class]));
}
当您将一个对象传递给_newcksmessage:(id*)arg1时,您可以这样做
id gak = [[Gak alloc] initWithInterestingStuff:interestingStuff];
[something _newCKSMSMessage:&gak];
使用以“\”开头的方法是不合适的。如果你这样做,你可能会与苹果的私有方法发生冲突。这是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]
。如果使用数组表示法访问值,请确保有正确的边界,否则会出现未定义的行为 难道和不是操作员的地址吗
所以id msg=&arg1
意味着指向arg1
(第三级!)
你应该做id msg=*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初始化程序中完成。这是一个例外,而不是规则。@sidyll:这有点尴尬,但实际上没有更好的方法来完成同样的事情,所以我们都必须接受它。这是苹果公司的私有方法之一(从转储的头),我正试着钩住它,理解arg1,然后返回原始函数。我尝试了id msg=*arg1,但是当我尝试记录msg时,我得到了uu NSCFType。我尝试访问&msg,但这会导致崩溃。我很感激你的快速回复,你想了解苹果在那里做什么?也许我们应该备份并讨论您正在尝试做的事情。如果您使用NSLog(@“%@”,msg)登录并获取“u NSCFType”,则它是免费桥接对象之一。我正在尝试拦截传入sms消息的发件人号码,以便我可以弹出回复框,而不必转到MobileSMS.app,然后切换回当前应用程序。这对我来说更像是一个学习过程,让我了解事情是如何运作的。我不需要了解苹果正在做的一切,只需要了解如何将arg1转换为可理解的结构、字典或信息数组。我不确定你说的免费桥接对象(抱歉,还是新的)是什么意思更新了示例代码以反映你可以做的事情,google知道免费桥接对象幸运的是,这导致了一个问题:Tweak.xm:45:警告:不兼容的Objective-C类型返回“objc_class*”,预期为“NSString*”。虽然这应该有效,但我认为@Chuck指出我的问题超出了指针的基础,与苹果调用此方法的方式有关。谢谢你!这是有意义的,特别是对于相同标题中的其他方法,如“addMessage”和“setMessage”。谢谢你,这可能帮我省了几个小时尝试错误的东西!