gpt4 book ai didi

ios - Sinch演示中的SINUIViewController有什么用?

转载 作者:行者123 更新时间:2023-11-29 00:50:35 24 4
gpt4 key购买 nike

我是新来的辛奇。我刚刚下载了用于调用的演示文件,我只是好奇这个文件的作用。特别是文件下面的最后几行。在我看来,这个 View Controller 涉及在调用结束和开始时显示适当的 View Controller ,但我不确定。

谢谢!

#import "SINUIViewController.h"

#import <objc/runtime.h>

// used for associated object references to simulate property-like storage for
// this category
static char sin_deferredDismissalKey;

@implementation SINUIViewController

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
if ([self.view window] == nil) {
_isAppearing = NO;
_isDisappearing = NO;
}
}

- (void)viewWillAppear:(BOOL)animated {
_isAppearing = YES;
[super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
_isAppearing = NO;
[self dismissIfNecessary];
}

- (void)viewWillDisappear:(BOOL)animated {
_isDisappearing = YES;
[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
_isAppearing = NO;
}

#pragma mark - Dismissal

- (void)dismiss {
if ([self isDisappearing]) {
return;
} else if ([self isAppearing]) {
[self setShouldDeferredDismiss:YES];
return;
}
[self dismissViewControllerAnimated:YES completion:nil];
}

- (void)dismissIfNecessary {
if ([self shouldDeferrDismiss]) {
[self setShouldDeferredDismiss:NO];
dispatch_async(dispatch_get_main_queue(), ^{
[self dismiss];
});
}
}

- (BOOL)shouldDeferrDismiss {
return [self sin_getAssociatedBOOLForKey:&sin_deferredDismissalKey];
}

- (void)setShouldDeferredDismiss:(BOOL)v {
[self sin_setAssociatedBOOL:v forKey:&sin_deferredDismissalKey];
}

#pragma mark -

- (BOOL)sin_getAssociatedBOOLForKey:(const void *)key {
NSNumber *v = (NSNumber *)objc_getAssociatedObject(self, key);
return v ? [v boolValue] : NO;
}

- (void)sin_setAssociatedBOOL:(BOOL)v forKey:(const void *)key {
objc_setAssociatedObject(self, key, [NSNumber numberWithBool:v], OBJC_ASSOCIATION_COPY);
}

@end

最佳答案

这个类只是一个基类辅助 View Controller ,帮助您更轻松地关闭 View Controller 。一些viewcontroller会继承自这个类。

- (BOOL)sin_getAssociatedBOOLForKey:(const void *)key
- (void)sin_setAssociatedBOOL:(BOOL)v forKey:(const void *)key

上述这些方法使用一种称为Associated Object 的技术来避免声明属性。您可以在此处阅读有关 Associated Object 的更多信息 http://nshipster.com/associated-objects/

关于ios - Sinch演示中的SINUIViewController有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38167668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com