dub*_*eat 0 pointers objective-c
我经常收到有关将错误的指针类型传递给函数的警告,我只想一劳永逸地理解这一点.
这两者有什么区别?
CFURLRef *ref=(CFURLRef *)sourceURLArray[0];
CFURLRef ref=(CFURLRef )sourceURLArray[0];
Run Code Online (Sandbox Code Playgroud)
第一个实际引用数组中对象的内存地址吗?第二个是否复制了它?
我目前追求的主要代码风格是拥有一系列值或对象.我希望能够使用这些值,将它们传递给其他函数,而无需更改原件.
从我所尝试的2个函数声明开始,如下所示.
- (void) loadAudioFileIntoMemory:(CFURLRef *)address channel:(int) value row:(int) value2;
- (void) loadAudioFileIntoMemory:(CFURLRef )address channel:(int) value row:(int) value2;
Run Code Online (Sandbox Code Playgroud)
有什么区别?
CFURLRef已经是一个指针 - 它被声明为:
typedef const struct __CFURL *CFURLRef;
Run Code Online (Sandbox Code Playgroud)
通常,在声明用于保存URL的变量时,您将需要使用CFURLRef 不带*的类型.大多数(或全部?)Core Foundation对象都是以这种方式定义的,您可以假设一个结尾的类型Ref是指针.
因此,如果您想要一个包含10个URL的数组,您可以编写如下内容:
CFURLRef sourceURLArray[10];
//... populate the array.
// Get a particular URL out of the array:
CFURLRef ref = sourceURLArray[0];
Run Code Online (Sandbox Code Playgroud)
也许是什么让这个略显混乱是Objective-C的对应,NSURL,确实需要*做出一个指针与所有Cocoa对象.所以你写的东西如下:
NSURL *sourceURLArray[10];
...
NSURL *url = sourceURLArray[0];
Run Code Online (Sandbox Code Playgroud)
最后,你可能会发现它更容易使用NSArray的NSURL对象比使用普通的C数组:
NSArray *sourceURLs = [NSArray arrayWithObjects:...];
NSURL *url = [sourceURLs objectAtIndex:0];
Run Code Online (Sandbox Code Playgroud)