我有一个大的主要课程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个以上的课程而导致性能下降?有风险吗? 答案 0 :(得分:1)
你所描述的内容(通过引用传递)在ObjC中是完全正常的并且非常便宜(单个保留的成本,加上可能一个版本;最坏的情况下可能是自动释放)。通过引用传递的整个点是你只传递一个指针。你没有执行任何副本。
2000年的ivars对单个课程来说有点令人震惊,并且可能暗示你真的需要以更有意义的方式分解事物,但这完全是一个关注点分离问题(从根本上说是可维护性问题) ,与表现无关。