将 WCSession 的委托设置为 nil
setting delegate of WCSession to nil
我正在使用 'WCSession' 连接我的应用程序和 Apple Watch。我更喜欢单例方法。所以,我做了一个共享会话:
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;
}
然后在开始会话中,我为会话设置了委托:
-(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,这会影响我的应用程序的性能吗?
首先我想知道self.session是跟在arc后面的,因为delegate总是包含weak reference所以没必要设置为nil。
它是否引起任何问题?如果你没有手动设置它 nil ?如果是,那么你可以在 sessionDidDeactivate
中将它设置为 nil,正如它所说:Called after all data from the previous session has been delivered and communication with the Apple Watch has ended.
并且你可以像
一样设置新会话
func sessionDidDeactivate(session: WCSession) {
// Begin the activation process for the new Apple Watch.
WCSession.defaultSession().activateSession()
}
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
我正在使用 'WCSession' 连接我的应用程序和 Apple Watch。我更喜欢单例方法。所以,我做了一个共享会话:
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;
}
然后在开始会话中,我为会话设置了委托:
-(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,这会影响我的应用程序的性能吗?
首先我想知道self.session是跟在arc后面的,因为delegate总是包含weak reference所以没必要设置为nil。
它是否引起任何问题?如果你没有手动设置它 nil ?如果是,那么你可以在 sessionDidDeactivate
中将它设置为 nil,正如它所说:Called after all data from the previous session has been delivered and communication with the Apple Watch has ended.
并且你可以像
func sessionDidDeactivate(session: WCSession) {
// Begin the activation process for the new Apple Watch.
WCSession.defaultSession().activateSession()
}
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