我扩展了 UIView 以实现一些独特的功能。除此之外,我还包含了几个对象作为属性,并在初始化程序中将它们定义为默认值。这意味着扩展此类 Graphics.m 的每个对象都将实例化这些对象并使其可用,例如默认界面颜色。
我的问题是,如果我有大量对象,我在每个对象中实例化这些默认值(它们可能在某些对象中未使用)这一事实是否会严重影响应用程序的性能?
我正在运行最新版本的 Xcode 和 iOS。
谢谢阅读。
我扩展了 UIView 以实现一些独特的功能。除此之外,我还包含了几个对象作为属性,并在初始化程序中将它们定义为默认值。这意味着扩展此类 Graphics.m 的每个对象都将实例化这些对象并使其可用,例如默认界面颜色。
我的问题是,如果我有大量对象,我在每个对象中实例化这些默认值(它们可能在某些对象中未使用)这一事实是否会严重影响应用程序的性能?
我正在运行最新版本的 Xcode 和 iOS。
谢谢阅读。
如果我有大量对象,我在每个对象中都实例化了这些默认值(它们可能在某些对象中未使用)这一事实是否会严重影响应用程序的性能?
这取决于这些属性的大小以及框架是否在内部缓存实例。
在您的情况下,您可以做的是在具有静态存储持续时间的变量中保留默认值,并在初始化实例时让您的属性指向这些变量。在这种情况下,如果这些属性在初始化后没有改变,那么它们都指向同一个对象。例如:
// 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
变量中。