2017-05-04 99 views
0

我有3类:CoreCacheHttpClient保留周期,弱房地产

Core我初始化缓存,PARAM core后,我通过Cache实例HttpClient

Core.m

-(id)init { 
    self = [super init]; 
    MyCache *cache = [[MyCache alloc] initWithCore:self]; 
    self.httpClient = [[MyHttpClient alloc] initWithCache:cache]; 
} 

Cache.m

@interface MyCache() 
    @property (nonatomic, strong) MyHttpClient *httpClient; 
@end 

@interface Core() 

@property (nonatomic, strong) MyHttpClient *httpClient; 

@end 

@implementation MyCache 
    -(instancetype) initWithCore: (Core *)core 
    { 
    if (self = [self init]) { 
     self.httpClient = core.httpClient; 
    } 
    return self; 
    } 
@end 

-(void)foo 
{ 
    [self.httpClient doSomething]; 
} 

MyHttpClient.m

@interface MyHttpClient : NSObject 

    @property (nonatomic, strong) MyCache *cache; 
    -(instancetype) initWithCache: (MyCache *)cache; 

@end 


@implementation MyHttpClient 

-(instancetype) initWithCache: (MyCache *)cache 
{ 
    if (self = [self init]) { 
     self.cache = cache; 
    } 
    return self; 
} 

-(void) doSomething 
{ 
    [self.cache cacheSomething]; 
} 

什么你可以看到,MyCache通过依赖注入使用MyHttpClient实例,另一方面MyHttpClient实例使用MyCache实例。

这是否叫做保留周期?

我是否需要设置MyCacheMyHttpClient属性为

谢谢,

+0

为什么缓存需要http客户端?我相信你真正的问题是你没有正确地分离关注点...... – Sulthan

+0

@Sulthan Cache有我需要通过HttpClient发送到服务器的对象列表。在Httpclient发送完成后,我调用缓存来清除存储在列表中的对象 – snaggs

+0

这正是我所说的,缓存不应该自己发送项目,它应该只保存它们。你的其他类中的一个应该询问“缓存”中的项目并发送它们。 – Sulthan

回答

6

如果你把逻辑放到一个简单的图。你可以看到HttpClient和Cache之间有一个保留周期。我认为最好将Cache中的httpclient属性设置为弱将解决保留周期。

Diagram