Werner Altewischer
11/16/2022, 8:23 PMhfhbd
11/16/2022, 8:51 PMWerner Altewischer
11/16/2022, 9:23 PMCall to main actor-isolated instance method 'xxx' in a synchronous nonisolated context
Werner Altewischer
11/16/2022, 9:27 PMPetter Måhlén
11/17/2022, 7:04 AMWerner Altewischer
11/17/2022, 7:21 AMWerner Altewischer
11/17/2022, 7:35 AMWerner Altewischer
11/17/2022, 1:11 PM@implementation BMMainThreadConfinedObject {
volatile BOOL _deallocating;
volatile BOOL _retained;
}
- (id)init {
if ((self = [super init])) {
BMEnsureMainThread();
// retain one additional time, this will be released when the retainCount == 1
[self retain];
_retained = YES;
}
return self;
}
- (void)dealloc {
BMEnsureMainThread();
[super dealloc];
}
- (oneway void)release {
NSUInteger retainCount = [self retainCount];
[super release];
retainCount--;
if (retainCount == 1 && _retained && !_deallocating) {
_deallocating = YES;
if ([NSThread isMainThread]) {
[super release];
} else {
// Create a weak reference to avoid retain being triggered
__typeof(self) __block __self = self;
dispatch_async(dispatch_get_main_queue(), ^{
[__self release];
});
}
}
}
- (id)retain {
if (_deallocating) {
return self;
} else {
return [super retain];
}
}
@end