Мне трудно понять, почему это потребляет память.
Я пытался;
- Предоставление больше времени для очистки ARC
- Создание __weak копии глобальных переменных для передачи
- Посмотрел на использование __bridge или __bridge_transfer, но я не считаю, что это уместно.
- Делать глобальные переменные общедоступными и ссылаться на них напрямую (работает, но нецелесообразно)
Этот поток iOS Objective c переведен через j2objc 0.9.3 из приложения Java.
@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, но до сих пор не понимаю причину такого потребления памяти.
Благодаря Student 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), безусловно, лучший вариант, поэтому я начну с него.
Большое спасибо за все ваши ответы!