我已经扩展了UIView以实现一些独特的功能。除此之外,我还将几个对象作为属性包含在内,并在初始化程序中将它们定义为默认值。这意味着扩展此类Graphics.m的每个对象都将实例化这些对象,并且可以使用默认接口颜色等。
我的问题是,如果我有大量的对象,我会在每个对象中实例化这些默认值(它们可能在某些对象中未使用)会严重影响应用程序的性能吗?
我正在运行最新版本的Xcode和iOS。
感谢阅读。
答案 0 :(得分: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
变量中的实例。