前言 分享iOS开发中遇到的问题,和相关的一些思考,本次内容包括:Extension、iOS9Crash、Pod库和CFDictionary相关。 do |config| config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' end end end 四、CFDictionary 的创建 最近对一段CFDictionary的创建代码产生好奇: CFDictionaryCreateMutable(CFAllocatorGetDefault(), 0, &kCFTypeDictionaryKeyCallBacks value) { id obj = (id)value; [obj retain]; // do something return obj; } CF是内存是手动管理,而CFDictionary
一个有趣的细节,在NSDictionary中键是被拷贝的,而在使用一个toll-free桥接的CFDictionary时却只被retain。 如果通过setObject:forKey使用toll-free桥接的CFDictionary,苹果增加了额外处理逻辑来使键被拷贝。 反过来这个结论则不成立 — 转换为CFDictionary的NSDictionary对象,对其使用CFDictionarySetValue()方法会调用回setObject:forKey并拷贝键。
视频帧的像素高度 codecType: CMVideoCodecType, //编码类型,如 kCMVideoCodecType_H264 encoderSpecification: CFDictionary sourceImageBufferAttributes: CFDictionary, //指定源图像属性,如YUV类型为 NV12 compressedDataAllocator: CFAllocator presentationTimeStamp: CMTime, //pts duration: CMTime, // 没什么用 frameProperties: CFDictionary,
public func CGImageSourceCreateImageAtIndex(_ isrc: CGImageSource, _ index: Int, _ options: CFDictionary public func CGImageDestinationCreateWithURL(_ url: CFURL, _ type: CFString, _ count: Int, _ options: CFDictionary ,cgimagePropertiesDestDic as CFDictionary?) ,gifDictionaryDestDic as CFDictionary?);//为gif图像设置属性 11 CGImageDestinationFinalize(destion!)
String: kSecAttrTokenIDSecureEnclave, // 11 kSecPrivateKeyAttrs as String: privateKeyParams] as CFDictionary guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else { throw error
类关系如下图: UIWebDocumentView会以成员变量struct __CFDictionary *_plugInViews来配对FigPluginView和UIWebPlugInView,
CGSize, scale: CGFloat) -> UIImage { let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary kCGImageSourceCreateThumbnailWithTransform: true, kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels] as CFDictionary
使用默认分配器 videoFormatDescription: CMVideoFormatDescription, //视频帧格式描述信息 videoDecoderSpecification: CFDictionary destinationImageBufferAttributes: CFDictionary, //像素缓冲区要求的属性 outputCallback: VTDecompressionOutputCallbackRecord
kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly ] SecItemAdd(query as CFDictionary kSecAttrAccessibleWhenUnlockedThisDeviceOnly ] // 首先删除旧项(如果存在) SecItemDelete(query as CFDictionary ) // 添加新项 let status = SecItemAdd(query as CFDictionary, nil) return status == errSecSuccess
CGSize, scale: CGFloat) -> UIImage { let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary kCGImageSourceCreateThumbnailWithTransform: true, kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels] as CFDictionary
swift-corelibs-foundation,一个 Core Foundation 的 Swift 包装器,一个位于 Foundation 核心的底层 C API,并提供了映射到 Foundation 的“桥接”抽象,包括 CFString、CFDictionary
包括图像宽度、高度等; CVPixelBufferPool CVPixelBuffer的缓冲池,因为CVPixelBuffer的创建和销毁代价很大; pixelBufferAttributes CFDictionary
Core Foundation 有 Foundation 没有的功能,比如 CFDictionary 的 Key 元素无需实现 NSCoping 协议、CFArray 可以不进行对象引用计数等、CFRunloop
kSecUseAuthenticationUIAllow ] // 删除可能已存在的项目 SecItemDelete(query as CFDictionary ) // 添加新项目 return SecItemAdd(query as CFDictionary, nil) } // 从 let status = SecItemCopyMatching(query as CFDictionary, &dataTypeRef) if status == errSecSuccess
,包括图像宽度、高度等; CVPixelBufferPool: CVPixelBuffer的缓冲池,因为CVPixelBuffer的创建和销毁代价很大; pixelBufferAttributes: CFDictionary
guard let privateKey = SecKeyCreateRandomKey(attributes as CFDictionary, &error) else { throw error
swift-corelibs-foundation,一个 Core Foundation 的 Swift 包装器,一个位于 Foundation 核心的底层 C API,并提供了映射到 Foundation 的“桥接”抽象,包括 CFString、CFDictionary
CGSize, scale: CGFloat) -> UIImage { let imageSourceOptions = [kCGImageSourceShouldCache: false] as CFDictionary kCGImageSourceCreateThumbnailWithTransform: true, kCGImageSourceThumbnailMaxPixelSize: maxDimensionInPixels] as CFDictionary
0x000000010e4b8a2e CoreText`TTypesetterAttrString::TTypesetterAttrString(__CFAttributedString const*, __CFDictionary
mByteOffsetInPacket做输出 kAudioFilePropertyChunkIDs 文件中的chunk编码格式 4字符编码格式数组 kAudioFilePropertyInfoDictionary 字典表示的Info CFDictionary