【问题标题】:IOS UIColor in struct结构中的IOS UIColor
【发布时间】:2012-10-12 12:29:18
【问题描述】:

Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Donec mauris nibh,venenatis sed purus nec,consequat commodo turpis。 Quisque rhoncus maximus mattis。 Morbi convallis sagittis lectus eget mollis。 Nunc tristique, lectus ac faucibus elementum, dui enim porta ex, nec vestibulum sem neque sat amet est. Donec massa arcu, 发酵 a massa eu, maximus rut​​rum urna。前庭 imperdiet pulvinar ipsum,非 imperdiet orci efficitur quis。 Donec volutpat erat dui,一个 sodales enim blandit ut。 Pellentesque ac imperdiet nibh,sed feugiat lorem。 Praesent in velit et est tempus facilisis sed at urna。 Nulla sapien sem、sagittis eu mauris quis、consequat tempor sem。 Mauris rhoncus, turpis eu vehicula volutpat, nibh libero balloonum quam, vel posuere ante metus quis leo。 Maecenas et lorem feugiat neque lobortis accumsan。

【问题讨论】:

    标签: objective-c


    【解决方案1】:

    您应该在结构上使用不透明类型CGColorRef 而不是UIColor。然后,在代码的 CocoaTouch 部分中,您可以获得一个 UIColor 实例,如下所示:

    UIColor *color = [UIColor colorWithCGColor:colorRef];
    

    【讨论】:

    • 您仍然需要以某种方式手动管理 CGColorRef 实例的生命周期...
    • @Vladimir:是的。或者你可以直接使用CGColor结构。
    • 我的意思是这种方法将消除编译器错误,但您有责任手动保留/释放 CGColorRef 字段 - 所以您的方法实际上并不能解决这里内存管理的根本问题
    • @Vladimir:您不会保留/释放CGColorCGColorRef,因为它们首先不是objective-c 类。它们分别只是普通的旧 C 结构和指针。
    • no :) 您需要使用 CGColorRetain 和 CFRelease 函数来维护 CGColorRef 的生命周期,就像使用 obj-c 对象进行保留/释放一样。试试这个示例控制器代码:gist.github.com/3879160 它会在没有 CGColorRetain 调用的情况下崩溃(并且使用该调用它会泄漏 CGColorRef)
    【解决方案2】:

    如果您遵循不混合结构和对象的建议,我会为您节省一些麻烦。这给您留下了两种可能性:

    1. 使用 Objective-C 对象:将“LevelMeterColorThreshold”设为具有两个属性的类,而不是结构。
    2. 使用 C 结构和 C 原语:如果足够的话,请使用三个浮点数而不是“UIColor”。然后,您可以稍后重建 UIColor。

    我可能会选择#1。

    【讨论】:

    • 我完全同意卡斯滕的观点
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多