mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2026-01-10 22:57:47 +00:00
Passing around a pointer was leading to crashes as the ASVC was the sole owner of the context. There are cases where the VC would dealloc while its subnodes were laying out. This could lead to the subnodes accessing a garbage pointer.
113 lines
5.2 KiB
Objective-C
113 lines
5.2 KiB
Objective-C
//
|
|
// ASTraitCollection.m
|
|
// AsyncDisplayKit
|
|
//
|
|
// Created by Ricky Cancro on 5/4/16.
|
|
//
|
|
// Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
|
// This source code is licensed under the BSD-style license found in the
|
|
// LICENSE file in the root directory of this source tree. An additional grant
|
|
// of patent rights can be found in the PATENTS file in the same directory.
|
|
//
|
|
|
|
#import "ASTraitCollection.h"
|
|
#import <AsyncDisplayKit/ASAssert.h>
|
|
#import <AsyncDisplayKit/ASAvailability.h>
|
|
|
|
@implementation ASTraitCollection
|
|
|
|
- (instancetype)initWithDisplayScale:(CGFloat)displayScale
|
|
userInterfaceIdiom:(UIUserInterfaceIdiom)userInterfaceIdiom
|
|
horizontalSizeClass:(UIUserInterfaceSizeClass)horizontalSizeClass
|
|
verticalSizeClass:(UIUserInterfaceSizeClass)verticalSizeClass
|
|
forceTouchCapability:(UIForceTouchCapability)forceTouchCapability
|
|
containerWindowSize:(CGSize)windowSize
|
|
{
|
|
self = [super init];
|
|
if (self) {
|
|
_displayScale = displayScale;
|
|
_userInterfaceIdiom = userInterfaceIdiom;
|
|
_horizontalSizeClass = horizontalSizeClass;
|
|
_verticalSizeClass = verticalSizeClass;
|
|
_forceTouchCapability = forceTouchCapability;
|
|
_containerWindowSize = windowSize;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
+ (ASTraitCollection *)traitCollectionWithDisplayScale:(CGFloat)displayScale
|
|
userInterfaceIdiom:(UIUserInterfaceIdiom)userInterfaceIdiom
|
|
horizontalSizeClass:(UIUserInterfaceSizeClass)horizontalSizeClass
|
|
verticalSizeClass:(UIUserInterfaceSizeClass)verticalSizeClass
|
|
forceTouchCapability:(UIForceTouchCapability)forceTouchCapability
|
|
containerWindowSize:(CGSize)windowSize
|
|
{
|
|
return [[[self class] alloc] initWithDisplayScale:displayScale
|
|
userInterfaceIdiom:userInterfaceIdiom
|
|
horizontalSizeClass:horizontalSizeClass
|
|
verticalSizeClass:verticalSizeClass
|
|
forceTouchCapability:forceTouchCapability
|
|
containerWindowSize:windowSize];
|
|
}
|
|
|
|
+ (ASTraitCollection *)traitCollectionWithASEnvironmentTraitCollection:(ASEnvironmentTraitCollection)traits
|
|
{
|
|
return [[[self class] alloc] initWithDisplayScale:traits.displayScale
|
|
userInterfaceIdiom:traits.userInterfaceIdiom
|
|
horizontalSizeClass:traits.horizontalSizeClass
|
|
verticalSizeClass:traits.verticalSizeClass
|
|
forceTouchCapability:traits.forceTouchCapability
|
|
containerWindowSize:traits.containerWindowSize];
|
|
|
|
}
|
|
|
|
+ (ASTraitCollection *)traitCollectionWithUITraitCollection:(UITraitCollection *)traitCollection
|
|
containerWindowSize:(CGSize)windowSize
|
|
{
|
|
ASTraitCollection *asyncTraitCollection = nil;
|
|
if (AS_AT_LEAST_IOS9) {
|
|
asyncTraitCollection = [[[self class] alloc] initWithDisplayScale:traitCollection.displayScale
|
|
userInterfaceIdiom:traitCollection.userInterfaceIdiom
|
|
horizontalSizeClass:traitCollection.horizontalSizeClass
|
|
verticalSizeClass:traitCollection.verticalSizeClass
|
|
forceTouchCapability:traitCollection.forceTouchCapability
|
|
containerWindowSize:windowSize];
|
|
}
|
|
else if (AS_AT_LEAST_IOS8) {
|
|
asyncTraitCollection = [[[self class] alloc] initWithDisplayScale:traitCollection.displayScale
|
|
userInterfaceIdiom:traitCollection.userInterfaceIdiom
|
|
horizontalSizeClass:traitCollection.horizontalSizeClass
|
|
verticalSizeClass:traitCollection.verticalSizeClass
|
|
forceTouchCapability:0
|
|
containerWindowSize:windowSize];
|
|
} else {
|
|
asyncTraitCollection = [[[self class] alloc] init];
|
|
}
|
|
|
|
return asyncTraitCollection;
|
|
}
|
|
|
|
- (ASEnvironmentTraitCollection)environmentTraitCollection
|
|
{
|
|
return (ASEnvironmentTraitCollection) {
|
|
.displayScale = self.displayScale,
|
|
.horizontalSizeClass = self.horizontalSizeClass,
|
|
.userInterfaceIdiom = self.userInterfaceIdiom,
|
|
.verticalSizeClass = self.verticalSizeClass,
|
|
.forceTouchCapability = self.forceTouchCapability,
|
|
.containerWindowSize = self.containerWindowSize,
|
|
};
|
|
}
|
|
|
|
- (BOOL)isEqualToTraitCollection:(ASTraitCollection *)traitCollection
|
|
{
|
|
return self.displayScale == traitCollection.displayScale &&
|
|
self.horizontalSizeClass == traitCollection.horizontalSizeClass &&
|
|
self.verticalSizeClass == traitCollection.verticalSizeClass &&
|
|
self.userInterfaceIdiom == traitCollection.userInterfaceIdiom &&
|
|
CGSizeEqualToSize(self.containerWindowSize, traitCollection.containerWindowSize) &&
|
|
self.forceTouchCapability == traitCollection.forceTouchCapability;
|
|
}
|
|
|
|
@end
|