我正在使用“WCSession”建立我的应用程序与Apple Watch之间的连接。我更喜欢单例方法。因此,我进行了一次共享 session :

static Shared_WCSession *sharedInstance = nil;
+(Shared_WCSession*)getSharedInstance {
    @synchronized(self) {
        // If the class variable holding the reference to the single ContentManager object is empty create it.
        if(sharedInstance == nil) {
             sharedInstance = [[Shared_WCSession alloc] init];
        }
    }
     return sharedInstance;
}

然后在开始 session 中,我设置了该 session 的代表:
-(void)startSession {
     if ([WCSession isSupported]) {
        self.session = [WCSession defaultSession];
        self.session.delegate = self;
        [self.session activateSession];
        LOG(@"WCSession is supported");
    }
}

解除分配委托人的正确方法是什么?

根据apple's docs,我可以通过以下方法进行操作:
sessionDidBecomeInactive(_:)
sessionDidDeactivate(_:)

如果将委托设置为nil,会不会影响应用程序的性能?

最佳答案

WCSession.delegate不会泄漏:it is a weak reference

NS_CLASS_AVAILABLE_IOS(9.0)
@interface WCSession : NSObject
// ...
/** A delegate must exist before the session will allow sends. */
@property (nonatomic, weak, nullable) id <WCSessionDelegate> delegate;
// ...

如果您使用的是ARC并且您的委托仍保留在内存中,则不是因为WCSession.delegate

09-27 13:05