1
damngood 2014-05-26 20:56:46 +08:00
指针的指针
如果仅仅是传一个 error 指针的话,在 callee 方法里面新 alloc 的 error 对象你在 caller 方法里面是获取不到的。 所以你可以放心的传一个 nil error的地址过去 |
2
guitarkitten 2014-05-26 21:08:09 +08:00
使用一个函数改变一个指针指向的位置,这个时候需要把这个指针的地址传递给这个函数,初学者的问题了,大家都会遇到
|
3
guitarkitten 2014-05-26 21:12:19 +08:00
@damngood arc会给你加上autorelease,你说的不是关键点
|
4
jxdwinter OP @damngood @guitarkitten 谢谢两位的回答,我明白了是传递一个地址过去,如果有 error 产生的话,就直接把这个地址上的值改变为error 对象,但是类似- (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx, BOOL *stop))predicate 这个方法里面中 *stop 也是一个地址吧,为什么就用了一个*呢?
|
5
damngood 2014-05-26 21:19:34 +08:00
@guitarkitten 你如果仔细看我的回复的话就会发现其实和你说的是一个意思,只是换了个方式而已。 和 arc 无关
|
6
dorentus 2014-05-26 21:20:04 +08:00
NSError * * error 是指向一个 NSError * 类型的变量的指针
BOOL * 是指向一个 BOOL 类型变量的指针 |
8
damngood 2014-05-26 21:29:06 +08:00
@jxdwinter 这种我觉得是 API 设计者根据使用场景甚至有些时候是传统来设计的吧。
如果是需要使用者在传递过去的指针所指向的指上面做修改的话, 就直接传个指针过去. 比如上边那个 *stop 如果是使用者可能会直接修改指针的话, 就传二阶指针过去. 比如 **NSError |
10
jxdwinter OP if you pass a pointer to an object to your function, the function can only modify what the pointer is pointing to.
if you pass a pointer to a pointer to an object then the function can modify the pointer to point to another object. In the case of NSError, the function might want to create a new NSError object and pass you back a pointer to that NSError object. Thus, you need double indirection so that the pointer can be modified. http://stackoverflow.com/a/903196/895188 |
11
favormm 2014-05-27 14:25:31 +08:00
二级指针
|