mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
ASImageNode backing store sharing for memory and CPU reduction (#1974)
This commit is contained in:
committed by
Adlai Holler
parent
57fd880d86
commit
c09db1cb17
59
AsyncDisplayKit/Private/ASWeakMap.h
Normal file
59
AsyncDisplayKit/Private/ASWeakMap.h
Normal file
@@ -0,0 +1,59 @@
|
||||
//
|
||||
// ASWeakMap.h
|
||||
// AsyncDisplayKit
|
||||
//
|
||||
// Created by Chris Danford on 7/11/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 <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
|
||||
/**
|
||||
* This class is used in conjunction with ASWeakMap. Instances of this type are returned by an ASWeakMap,
|
||||
* must retain this value for as long as they want the entry to exist in the map.
|
||||
*/
|
||||
@interface ASWeakMapEntry<Value> : NSObject
|
||||
|
||||
@property (nonatomic, retain, readonly) Value value;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
/**
|
||||
* This is not a full-featured map. It does not support features like `count` and FastEnumeration because there
|
||||
* is not currently a need.
|
||||
*
|
||||
* This is a map that does not retain keys or values added to it. When both getting and setting, the caller is
|
||||
* returned a ASWeakMapEntry and must retain it for as long as it wishes the key/value to remain in the map.
|
||||
* We return a single Entry value to the caller to avoid two potential problems:
|
||||
*
|
||||
* 1) It's easier for callers to retain one value (the Entry) and not two (a key and a value).
|
||||
* 2) Key values are tested for `isEqual` equality. If if a caller asks for a key "A" that is equal to a key "B"
|
||||
* already in the map, then we need the caller to retain key "B" and not key "A". Returning an Entry simplifies
|
||||
* the semantics.
|
||||
*
|
||||
* The underlying storage is a hash table and the Key type should implement `hash` and `isEqual:`.
|
||||
*/
|
||||
@interface ASWeakMap<__covariant Key : NSObject *, Value> : NSObject
|
||||
|
||||
/**
|
||||
* Read from the cache. The Value object is accessible from the returned ASWeakMapEntry.
|
||||
*/
|
||||
- (nullable ASWeakMapEntry<Value> *)entryForKey:(Key)key;
|
||||
|
||||
/**
|
||||
* Put a value into the cache. If an entry with an equal key already exists, then the value is updated on the existing entry.
|
||||
*/
|
||||
- (ASWeakMapEntry<Value> *)setObject:(Value)value forKey:(Key)key;
|
||||
|
||||
@end
|
||||
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
Reference in New Issue
Block a user