
CFArrayRef windowList = CGWindowListcopyWindowInfo(kCGWindowListOptionOnScreenOnly,kCGNullWindowID);NSLog(@"%@",(__brIDge NSArray *)windowList);
这会导致EXC_BAD_ACCESS:
CFArrayRef windowIDList = CGWindowListCreate(kCGWindowListOptionOnScreenOnly,kCGNullWindowID);NSLog(@"Array %@",(__brIDge NSArray*) windowIDList);解决方法 创建为
NSArrays的数组只能包含像Objective-C对象一样的元素. 如果将适当的CFArrayCallBacks传递给CFArrayCreate,则创建为CFArray的数组可以包含任何内容.
CGWindowListCreate正在创建一个CFArray,并用不像对象的东西填充它,但CGWindowListCreate正在使用不关心它的CFArrayCallbacks.
当您尝试使用%@格式说明符打印此CFArray时,NSLog会向该阵列发送一个Objective-C -description消息. CFArray通过向每个元素发送Objective-C描述消息来处理此问题.不幸的是,它的元素不是对象,所以不可能向它们发送Objective-C消息.因此崩溃.
试试这个:
CFStringRef description = CFcopyDescription(windowIDList);NSLog(@"Array %@",description);CFRelease(description);
CFcopyDescription函数在数组的每个元素上使用CFArrayCallbacks函数之一,而不是尝试向每个元素发送Objective-C消息.回调知道如何处理数组元素,所以它工作正常.我在测试程序中得到了这个输出:
2011-11-10 18:50:23.888 test[15156:707] <CFArray 0x1001140c0 [0x7fff7fd24ea0]>{type = mutable-small,count = 19,values = ( 0 : <0x7d7> 1 : <0x2d> 2 : <0x20> 3 : <0x21> 4 : <0x1e> 5 : <0x9> 6 : <0x7a8> 7 : <0x2c> 8 : <0x2e> 9 : <0x743> 10 : <0x32> 11 : <0x85> 12 : <0x695> 13 : <0x62a> 14 : <0x62b> 15 : <0xa> 16 : <0x26> 17 : <0x18> 18 : <0x2>)} 总结 以上是内存溢出为你收集整理的objective-c – 将CFArrayRef转换为NSArray时崩溃全部内容,希望文章能够帮你解决objective-c – 将CFArrayRef转换为NSArray时崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)