Skip to content

Commit 1b7a9cf

Browse files
author
eagleychen
committed
修复oc/c混编内存问题
1 parent a010d90 commit 1b7a9cf

File tree

1 file changed

+20
-13
lines changed

1 file changed

+20
-13
lines changed

Source/SDK/LinkVideo/TIoTCoreXP2PBridge.mm

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ - (void)cancelTimer;
4242
- (void)doTick:(data_report_t)data_buf;
4343
@end
4444

45+
__unsafe_unretained id<TIoTCoreXP2PBridgeDelegate> BridgeDelegate = nil;
4546
const char* XP2PMsgHandle(const char *idd, XP2PType type, const char* msg) {
4647

4748
BOOL logEnable = [TIoTCoreXP2PBridge sharedInstance].logEnable;
@@ -113,22 +114,23 @@ - (void)doTick:(data_report_t)data_buf;
113114
});
114115
}
115116

116-
117-
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
118-
id<TIoTCoreXP2PBridgeDelegate> delegate = [TIoTCoreXP2PBridge sharedInstance].delegate;
119-
if ([delegate respondsToSelector:@selector(reviceEventMsgWithID:eventType:msg:)]) {
120-
[delegate reviceEventMsgWithID:DeviceName eventType:type msg:msg];
121-
}
122-
});
117+
__weak typeof(id<TIoTCoreXP2PBridgeDelegate>) weakDelegate = BridgeDelegate;
118+
if (weakDelegate) {
119+
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
120+
if (weakDelegate && [weakDelegate respondsToSelector:@selector(reviceEventMsgWithID:eventType:msg:)]) {
121+
[weakDelegate reviceEventMsgWithID:DeviceName eventType:type msg:msg];
122+
}
123+
});
124+
}
123125
}
124126
return nullptr;
125127
}
126128

127129
void XP2PDataMsgHandle(const char *idd, uint8_t* recv_buf, size_t recv_len) {
128130
NSString *DeviceName = [NSString stringWithCString:idd encoding:[NSString defaultCStringEncoding]]?:@"";
129-
id<TIoTCoreXP2PBridgeDelegate> delegate = [TIoTCoreXP2PBridge sharedInstance].delegate;
130-
if ([delegate respondsToSelector:@selector(getVideoPacketWithID:data:len:)]) {
131-
[delegate getVideoPacketWithID:DeviceName data:recv_buf len:recv_len];
131+
__weak typeof(id<TIoTCoreXP2PBridgeDelegate>) weakDelegate = BridgeDelegate;
132+
if (weakDelegate && [weakDelegate respondsToSelector:@selector(getVideoPacketWithID:data:len:)]) {
133+
[weakDelegate getVideoPacketWithID:DeviceName data:recv_buf len:recv_len];
132134
}
133135
}
134136

@@ -138,12 +140,12 @@ void XP2PDataMsgHandle(const char *idd, uint8_t* recv_buf, size_t recv_len) {
138140

139141
NSString *response = @"{\"status\":0}"; //默认返回值
140142

141-
id<TIoTCoreXP2PBridgeDelegate> delegate = [TIoTCoreXP2PBridge sharedInstance].delegate;
142-
if ([delegate respondsToSelector:@selector(reviceDeviceMsgWithID:data:)]) {
143+
__weak typeof(id<TIoTCoreXP2PBridgeDelegate>) weakDelegate = BridgeDelegate;
144+
if (weakDelegate && [weakDelegate respondsToSelector:@selector(reviceDeviceMsgWithID:data:)]) {
143145

144146
NSString *DeviceName = [NSString stringWithCString:idd encoding:[NSString defaultCStringEncoding]]?:@"";
145147
NSData *DeviceData = [NSData dataWithBytes:recv_buf length:recv_len];
146-
NSString *res = [delegate reviceDeviceMsgWithID:DeviceName data:DeviceData];
148+
NSString *res = [weakDelegate reviceDeviceMsgWithID:DeviceName data:DeviceData];
147149
if (res) {
148150
response = res;
149151
}
@@ -285,6 +287,11 @@ BOOL checkVersionAfterPercent(NSString *input) {
285287
return isVersionLessThanTarget(versionString, @"2.4.49");
286288
}
287289

290+
- (void)setDelegate:(id<TIoTCoreXP2PBridgeDelegate>)delegate {
291+
_delegate = delegate;
292+
BridgeDelegate = _delegate;
293+
}
294+
288295
- (XP2PErrCode)startAppWith:(NSString *)pro_id dev_name:(NSString *)dev_name appconfig:(TIoTP2PAPPConfig *)appconfig {
289296
appconfig.userid = [self getAppUUID];
290297
appconfig.pro_id = pro_id;

0 commit comments

Comments
 (0)