我很难理解为什么这会消耗内存。
我试过了;
- 允许ARC更多的时间来清理
- 创建全局的__weak副本传递
- 看着使用__bridge或__bridge_transfer,但我不认为这是适当的。
- 使全局公共和直接引用它(作品,但不切实际的)
这个iOS的目标C线是从Java应用程序通过j2objc 0.9.3翻译。
@implementation Comms_StatusThread
- (void)run {
while (true) {
// Consumes memeory at aproximately 100k per 5 min
[S globals];
@try {
[JavaLangThread sleepWithLong:10];
}
@catch (JavaLangInterruptedException *e) {
}
}
此翻译静态单店“全局”,以从应用程序的任何地方进行访问(真正的代码存储更多的类&回调)。
@implementation S
Globals * S_globals__ = nil;
+ (Globals *)globals {
{
if (S_globals__ == nil) S_globals__ = [[Globals alloc] init];
return S_globals__;
}
}
@end
任何帮助表示赞赏。我是Objective-C和ARC的新手。我在ARC上阅读过相当多的内容,但仍不明白这种内存消耗的原因。
感谢学生T我试了下面。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(test:) userInfo:nil repeats:YES];
return YES;
}
-(void) test: (NSObject*) o {
[S comms];
[S globals];
}
这不占用内存,我打算这样做不过tball的新的答案(使用j2objc @AutoreleasePool)显然是最好的选择,所以我会从那里开始。
非常感谢您的答复!
+1对于您的尝试 – SmallChess 2014-08-29 04:45:20
“允许更多时间用于ARC清理”我不认为ARC以您认为的方式工作。 ARC在编译时只是为你插入发行版本。它不像Java那里有一个垃圾回收器可以扫描并释放事物。 – 2014-08-29 05:33:54