0

我扩展了 UIView 以实现一些独特的功能。除此之外,我还包含了几个对象作为属性,并在初始化程序中将它们定义为默认值。这意味着扩展此类 Graphics.m 的每个对象都将实例化这些对象并使其可用,例如默认界面颜色。

我的问题是,如果我有大量对象,我在每个对象中实例化这些默认值(它们可能在某些对象中未使用)这一事实是否会严重影响应用程序的性能?

我正在运行最新版本的 Xcode 和 iOS。

谢谢阅读。

4

1 回答 1

1

如果我有大量对象,我在每个对象中都实例化了这些默认值(它们可能在某些对象中未使用)这一事实是否会严重影响应用程序的性能?

这取决于这些属性的大小以及框架是否在内部缓存实例。

在您的情况下,您可以做的是在具有静态存储持续时间的变量中保留默认值,并在初始化实例时让您的属性指向这些变量。在这种情况下,如果这些属性在初始化后没有改变,那么它们都指向同一个对象。例如:

// ARKGraphicsView.m

static UIColor *_ARKGraphicsViewDefaultForegroundColour = nil;
static UIColor *_ARKGraphicsViewDefaultBackgroundColour = nil;
static UIColor *_ARKGraphicsViewDefaultBorderColour = nil;

@implementation ARKGraphicsView

+ (void)initialize {
    if (self == [ARKGraphicsView class]) {
        // This code is executed only once,
        // when the class receives its first message
        _ARKGraphicsViewDefaultForegroundColour = [UIColor …];
        _ARKGraphicsViewDefaultBackgroundColour = [UIColor …];
        _ARKGraphicsViewDefaultBorderColour = [UIColor …];
    }
}

- (id)initWith… {
    self = [super initWith…];
    if (self) {
        _foregroundColour = _ARKGraphicsViewDefaultForegroundColour;
        _backgroundColour = _ARKGraphicsViewDefaultBackgroundColour;
        _borderColour = _ARKGraphicsViewDefaultBorderColour;
    }
    return self;
}

…

@end

如果程序创建了这个类的 100 个实例并且这些实例没有改变颜色,那么将只有三个UIColor实例——那些保存在_ARK*Colour变量中。

于 2013-06-14T08:27:01.523 回答