Merge branch 'charlesmchen/singletonAssert'

pull/1/head
Matthew Chen 8 years ago
commit d1189e5b03

@ -1,9 +1,5 @@
//
// TSAccountManagement.h
// TextSecureKit
//
// Created by Frederic Jacobs on 27/10/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import <Foundation/Foundation.h>
@ -21,6 +17,8 @@ static NSString *const TSRegistrationErrorUserInfoHTTPStatus = @"TSHTTPStatus";
#pragma mark - Initializers
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager
storageManager:(TSStorageManager *)storageManager;

@ -35,6 +35,8 @@ NS_ASSUME_NONNULL_BEGIN
_networkManager = networkManager;
_storageManager = storageManager;
OWSSingletonAssert();
return self;
}

@ -1,5 +1,6 @@
// Created by Michael Kirk on 11/7/16.
// Copyright © 2016 Open Whisper Systems. All rights reserved.
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import "TSYapDatabaseObject.h"
@ -7,6 +8,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface TSPrivacyPreferences : TSYapDatabaseObject
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)sharedInstance;
@property BOOL shouldBlockOnIdentityChange;

@ -1,5 +1,6 @@
// Created by Michael Kirk on 11/7/16.
// Copyright © 2016 Open Whisper Systems. All rights reserved.
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import "TSPrivacyPreferences.h"
@ -37,6 +38,8 @@ NSString *const TSPrivacyPreferencesSingletonKey = @"TSPrivacyPreferences";
_shouldBlockOnIdentityChange = shouldBlockOnIdentityChange;
OWSSingletonAssert();
return self;
}

@ -25,6 +25,19 @@ NS_ASSUME_NONNULL_BEGIN
return sharedInstance;
}
- (instancetype)init
{
self = [super init];
if (!self) {
return self;
}
OWSSingletonAssert();
return self;
}
- (nullable SignalRecipient *)synchronousLookup:(NSString *)identifier error:(NSError **)error
{
dispatch_semaphore_t sema = dispatch_semaphore_create(0);

@ -23,6 +23,8 @@
if (self) {
_nbPhoneNumberUtil = [[NBPhoneNumberUtil alloc] init];
OWSSingletonAssert();
}
return self;

@ -1,5 +1,6 @@
// Created by Michael Kirk on 10/7/16.
// Copyright © 2016 Open Whisper Systems. All rights reserved.
//
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
NS_ASSUME_NONNULL_BEGIN
@ -23,6 +24,8 @@ NS_SWIFT_NAME(MessageSender)
ContactsUpdater *_contactsUpdater;
}
- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithNetworkManager:(TSNetworkManager *)networkManager
storageManager:(TSStorageManager *)storageManager
contactsManager:(id<ContactsManagerProtocol>)contactsManager

@ -288,6 +288,8 @@ NSString *const OWSMessageSenderRateLimitedException = @"RateLimitedException";
_dbConnection = storageManager.newDatabaseConnection;
_disappearingMessagesJob = [[OWSDisappearingMessagesJob alloc] initWithStorageManager:storageManager];
OWSSingletonAssert();
return self;
}

@ -66,6 +66,8 @@ NSString *const kTSStorageManager_SyncedBlockedPhoneNumbersKey = @"kTSStorageMan
_storageManager = storageManager;
_messageSender = messageSender;
OWSSingletonAssert();
return self;
}

@ -105,7 +105,9 @@ NS_ASSUME_NONNULL_BEGIN
_disappearingMessagesJob = [[OWSDisappearingMessagesJob alloc] initWithStorageManager:storageManager];
_incomingMessageFinder = [[OWSIncomingMessageFinder alloc] initWithDatabase:storageManager.database];
_blockingManager = [TSBlockingManager sharedManager];
OWSSingletonAssert();
return self;
}

@ -28,6 +28,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface TSNetworkManager : NSObject
- (instancetype)init NS_UNAVAILABLE;
+ (id)sharedManager;
- (void)makeRequest:(TSRequest *)request

@ -43,6 +43,8 @@ typedef void (^failureBlock)(NSURLSessionDataTask *task, NSError *error);
_signalService = signalService;
OWSSingletonAssert();
return self;
}

@ -1,9 +1,5 @@
//
// TSSocketManager.h
// TextSecureiOS
//
// Created by Frederic Jacobs on 17/05/14.
// Copyright (c) 2014 Open Whisper Systems. All rights reserved.
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
//
#import <Foundation/Foundation.h>
@ -23,6 +19,8 @@ extern NSString *const SocketConnectingNotification;
@interface TSSocketManager : NSObject <SRWebSocketDelegate>
- (instancetype)init NS_UNAVAILABLE;
+ (void)becomeActiveFromForeground;
+ (void)becomeActiveFromBackgroundExpectMessage:(BOOL)expected;

@ -61,6 +61,8 @@ NSString *const SocketConnectingNotification = @"SocketConnectingNotification";
[self addObserver:self forKeyPath:@"status" options:0 context:kSocketStatusObservationContext];
OWSSingletonAssert();
return self;
}

@ -16,6 +16,8 @@ extern NSString *const TSUIDatabaseConnectionDidUpdateNotification;
@interface TSStorageManager : NSObject
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)sharedManager;
/**

@ -129,6 +129,8 @@ static NSString *keychainDBPassAccount = @"TSDatabasePass";
[NSException raise:TSStorageManagerExceptionNameNoDatabase format:@"Failed to initialize database."];
}
OWSSingletonAssert();
}
return self;

@ -35,3 +35,37 @@ NSCAssert(0, @"Assertion failed: %s", CONVERT_EXPR_TO_STRING(X)); \
#endif
#endif
#pragma mark - Singleton Asserts
// The "singleton asserts" can be used to ensure
// that we only create a singleton once.
//
// The simplest way to use them is the OWSSingletonAssert() macro.
// It is intended to be used inside the singleton's initializer.
//
// If, however, a singleton has multiple possible initializers,
// you need to:
//
// 1. Use OWSSingletonAssertFlag() outside the class definition.
// 2. Use OWSSingletonAssertInit() in each initializer.
#ifdef DEBUG
#define OWSSingletonAssertFlag() static BOOL _isSingletonCreated = NO;
#define OWSSingletonAssertInit() \
@synchronized([self class]) \
{ \
OWSAssert(!_isSingletonCreated); \
_isSingletonCreated = YES; \
}
#define OWSSingletonAssert() OWSSingletonAssertFlag() OWSSingletonAssertInit()
#else
#define OWSSingletonAssertFlag()
#define OWSSingletonAssertInit()
#define OWSSingletonAssert()
#endif

Loading…
Cancel
Save