将大类引用传递给其他类,性能下降

时间:2017-03-04 20:35:35

标签: ios objective-c

我有一个大的主要课程Core(2k行)。我还有其他课程UserDefaultsStorage负责存储数据。

UserDefaultsStorage init Core -(id)init { self = [super init]; self.storage = [[UserDefaultsStorage alloc] initWithDefaults:[NSUserDefaults standardUserDefaults]]; } 课程的初始化

UserDefaultsStorage

问题是:我需要在其他5个类中使用SecondClass,其中一个UserDefaultsStorage。我不想从Core创建单例,所以我决定通过引用传递 @interface SecondClass : NSObject - (id)initWithCore:(Core *)core; @end 类,如:

SecondClass.h:

@interface Core (Private)
  @property (nonatomic, readonly) id<UserDefaultsStorage> storage;
@end

@interface SecondClass ()
  @property (nonatomic, assign) Core *core;
@end

@implementation SecondClass

- (id)initWithCore:(Core *)core
{
  self. core = core;
  return self;
}

- (void)saveUserId:(NSString *)userId
{       
  [self.core.storage setString:userId forKey:@"some_key"];    
}


@end

SecondClass.m

Core
  • 我是否通过using (var rsa = new RSACryptoServiceProvider(KEY_SIZE)) { publicKeyAlice = rsa.ExportCspBlob(false); privateKeyAlice = rsa.ExportCspBlob(true); } using (var rsa = new RSACryptoServiceProvider(KEY_SIZE)) { privateKeyBob = rsa.ExportCspBlob(true); publicKeyBob = rsa.ExportCspBlob(false); } 引用5个以上的课程而导致性能下降?有风险吗?
  • 这是不错的做法

1 个答案:

答案 0 :(得分:1)

你所描述的内容(通过引用传递)在ObjC中是完全正常的并且非常便宜(单个保留的成本,加上可能一个版本;最坏的情况下可能是自动释放)。通过引用传递的整个点是你只传递一个指针。你没有执行任何副本。

2000年的ivars对单个课程来说有点令人震惊,并且可能暗示你真的需要以更有意义的方式分解事物,但这完全是一个关注点分离问题(从根本上说是可维护性问题) ,与表现无关。