关于Core Graphics中的带Ref后缀的类

如题,相信很多人在学习Core Graphics时都会用到带Ref后缀的类,这时可能很多读者会有疑问为什么要带Ref后缀呢。其实带有Ref后缀的类型是Core Graphics中用来模拟模拟面向对象机制的C结构。Core Graphics对象和Objective-C对象都是在堆上分配内存,因此创建一个Core Graphics对象时,同样会返回一个指向对象内存地址的指针。

使用这种分配方式的C结构都有一个用来表示结构指针(结构名后加一个 ***)的类型定义(type definition)。例如CGColor结构(不会直接使用的类型)有一个表示CGColor *的类型定义——CGColorRef(应该使用的类型)。使用这种类型定义是为了区分指针变量,方便开发者判断指针变量是指向C结构还是指向可以接收消息的Objective-C对象。

相反,部分类型没有结构指针,因此名称不带Ref后缀。例如CGRect和CGPoint,这些类型的数据结构简单,可以直接在栈上分配内存,因此不需要使用结构指针。

带有Ref后缀的类型的对象可能具有指向其他Core Graphics对象的强引用指针,并成为这些对象的拥有者。但是ARC无法识别这类强引用和对象所有权,必须在使用完之后手动释放。规则是,如果名称中带有copy或者create的函数创建了一个Core Graphics对象就必须调用对应的release函数并传入该对象指针。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容