Swiftgram/examples/CatDealsCollectionView/Sample/ASDisplayNode+CatDeals.mm
Adlai Holler 6e7cdea797
Add extension points for global node behaviors, potentially replacing interface state delegates (#1229)
* Add extension points for global node behaviors via categories and a public ivar

* Update documentation on context ivar
2019-02-14 14:17:03 -08:00

62 lines
1.2 KiB
Plaintext

//
// ASDisplayNode+CatDeals.mm
// Texture
//
// Copyright (c) Pinterest, Inc. All rights reserved.
// Licensed under Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0
#import "ASDisplayNode+CatDeals.h"
#import <AsyncDisplayKit/ASThread.h>
// A place to store info on any display node in this app.
struct CatDealsNodeContext {
NSString *loggingID = nil;
};
// Convenience to cast _context into our struct reference.
NS_INLINE CatDealsNodeContext &GetNodeContext(ASDisplayNode *node) {
return *static_cast<CatDealsNodeContext *>(node->_context);
}
@implementation ASDisplayNode (CatDeals)
- (void)baseDidInit
{
_context = new CatDealsNodeContext;
}
- (void)baseWillDealloc
{
delete &GetNodeContext(self);
}
- (void)setCatsLoggingID:(NSString *)catsLoggingID
{
NSString *copy = [catsLoggingID copy];
ASLockScopeSelf();
GetNodeContext(self).loggingID = copy;
}
- (NSString *)catsLoggingID
{
ASLockScopeSelf();
return GetNodeContext(self).loggingID;
}
- (void)didEnterVisibleState
{
if (NSString *loggingID = self.catsLoggingID) {
NSLog(@"Visible: %@", loggingID);
}
}
- (void)didExitVisibleState
{
if (NSString *loggingID = self.catsLoggingID) {
NSLog(@"NotVisible: %@", loggingID);
}
}
@end