Skip to content

Commit cba9da6

Browse files
committed
dispatch_retain & dispatch_release no longer needed with latest ARC
1 parent 4c75ee3 commit cba9da6

File tree

2 files changed

+137
-42
lines changed

2 files changed

+137
-42
lines changed

GCD/GCDAsyncSocket.m

Lines changed: 67 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,32 @@
1313
// For more information see: https://github.com/robbiehanson/CocoaAsyncSocket/wiki/ARC
1414
#endif
1515

16+
/**
17+
* Does ARC support support GCD objects?
18+
* It does if the minimum deployment target is iOS 6+ or Mac OS X 8+
19+
**/
20+
#if TARGET_OS_IPHONE
21+
22+
// Compiling for iOS
23+
24+
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 60000 // iOS 6.0 or later
25+
#define NEEDS_DISPATCH_RETAIN_RELEASE 0
26+
#else // iOS 5.X or earlier
27+
#define NEEDS_DISPATCH_RETAIN_RELEASE 1
28+
#endif
29+
30+
#else
31+
32+
// Compiling for Mac OS X
33+
34+
#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 // Mac OS X 10.8 or later
35+
#define NEEDS_DISPATCH_RETAIN_RELEASE 0
36+
#else
37+
#define NEEDS_DISPATCH_RETAIN_RELEASE 1 // Mac OS X 10.7 or earlier
38+
#endif
39+
40+
#endif
41+
1642
#import "GCDAsyncSocket.h"
1743

1844
#if TARGET_OS_IPHONE
@@ -972,12 +998,11 @@ - (id)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq socketQu
972998
if((self = [super init]))
973999
{
9741000
delegate = aDelegate;
1001+
delegateQueue = dq;
9751002

976-
if (dq)
977-
{
978-
dispatch_retain(dq);
979-
delegateQueue = dq;
980-
}
1003+
#if NEEDS_DISPATCH_RETAIN_RELEASE
1004+
if (dq) dispatch_retain(dq);
1005+
#endif
9811006

9821007
socket4FD = SOCKET_NULL;
9831008
socket6FD = SOCKET_NULL;
@@ -992,8 +1017,10 @@ - (id)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq socketQu
9921017
NSAssert(sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
9931018
@"The given socketQueue parameter must not be a concurrent queue.");
9941019

995-
dispatch_retain(sq);
9961020
socketQueue = sq;
1021+
#if NEEDS_DISPATCH_RETAIN_RELEASE
1022+
dispatch_retain(sq);
1023+
#endif
9971024
}
9981025
else
9991026
{
@@ -1027,12 +1054,15 @@ - (void)dealloc
10271054
}
10281055

10291056
delegate = nil;
1030-
if (delegateQueue)
1031-
dispatch_release(delegateQueue);
1057+
1058+
#if NEEDS_DISPATCH_RETAIN_RELEASE
1059+
if (delegateQueue) dispatch_release(delegateQueue);
1060+
#endif
10321061
delegateQueue = NULL;
10331062

1034-
if (socketQueue)
1035-
dispatch_release(socketQueue);
1063+
#if NEEDS_DISPATCH_RETAIN_RELEASE
1064+
if (socketQueue) dispatch_release(socketQueue);
1065+
#endif
10361066
socketQueue = NULL;
10371067

10381068
LogInfo(@"%@ - %@ (finish)", THIS_METHOD, self);
@@ -1109,11 +1139,10 @@ - (void)setDelegateQueue:(dispatch_queue_t)newDelegateQueue synchronously:(BOOL)
11091139
{
11101140
dispatch_block_t block = ^{
11111141

1112-
if (delegateQueue)
1113-
dispatch_release(delegateQueue);
1114-
1115-
if (newDelegateQueue)
1116-
dispatch_retain(newDelegateQueue);
1142+
#if NEEDS_DISPATCH_RETAIN_RELEASE
1143+
if (delegateQueue) dispatch_release(delegateQueue);
1144+
if (newDelegateQueue) dispatch_retain(newDelegateQueue);
1145+
#endif
11171146

11181147
delegateQueue = newDelegateQueue;
11191148
};
@@ -1167,11 +1196,10 @@ - (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQ
11671196

11681197
delegate = newDelegate;
11691198

1170-
if (delegateQueue)
1171-
dispatch_release(delegateQueue);
1172-
1173-
if (newDelegateQueue)
1174-
dispatch_retain(newDelegateQueue);
1199+
#if NEEDS_DISPATCH_RETAIN_RELEASE
1200+
if (delegateQueue) dispatch_release(delegateQueue);
1201+
if (newDelegateQueue) dispatch_retain(newDelegateQueue);
1202+
#endif
11751203

11761204
delegateQueue = newDelegateQueue;
11771205
};
@@ -1612,8 +1640,10 @@ - (BOOL)acceptOnInterface:(NSString *)inInterface port:(uint16_t)port error:(NSE
16121640

16131641
dispatch_source_set_cancel_handler(accept4Source, ^{
16141642

1643+
#if NEEDS_DISPATCH_RETAIN_RELEASE
16151644
LogVerbose(@"dispatch_release(accept4Source)");
16161645
dispatch_release(acceptSource);
1646+
#endif
16171647

16181648
LogVerbose(@"close(socket4FD)");
16191649
close(socketFD);
@@ -1644,8 +1674,10 @@ - (BOOL)acceptOnInterface:(NSString *)inInterface port:(uint16_t)port error:(NSE
16441674

16451675
dispatch_source_set_cancel_handler(accept6Source, ^{
16461676

1677+
#if NEEDS_DISPATCH_RETAIN_RELEASE
16471678
LogVerbose(@"dispatch_release(accept6Source)");
16481679
dispatch_release(acceptSource);
1680+
#endif
16491681

16501682
LogVerbose(@"close(socket6FD)");
16511683
close(socketFD);
@@ -1779,8 +1811,9 @@ - (BOOL)doAccept:(int)parentSocketFD
17791811
}
17801812

17811813
// Release the socket queue returned from the delegate (it was retained by acceptedSocket)
1782-
if (childSocketQueue)
1783-
dispatch_release(childSocketQueue);
1814+
#if NEEDS_DISPATCH_RETAIN_RELEASE
1815+
if (childSocketQueue) dispatch_release(childSocketQueue);
1816+
#endif
17841817

17851818
// The accepted socket should have been retained by the delegate.
17861819
// Otherwise it gets properly released when exiting the block.
@@ -2533,11 +2566,13 @@ - (void)startConnectTimeout:(NSTimeInterval)timeout
25332566
[self doConnectTimeout];
25342567
}});
25352568

2569+
#if NEEDS_DISPATCH_RETAIN_RELEASE
25362570
dispatch_source_t theConnectTimer = connectTimer;
25372571
dispatch_source_set_cancel_handler(connectTimer, ^{
25382572
LogVerbose(@"dispatch_release(connectTimer)");
25392573
dispatch_release(theConnectTimer);
25402574
});
2575+
#endif
25412576

25422577
dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (timeout * NSEC_PER_SEC));
25432578
dispatch_source_set_timer(connectTimer, tt, DISPATCH_TIME_FOREVER, 0);
@@ -3597,15 +3632,19 @@ - (void)setupReadAndWriteSourcesForNewlyConnectedSocket:(int)socketFD
35973632

35983633
__block int socketFDRefCount = 2;
35993634

3635+
#if NEEDS_DISPATCH_RETAIN_RELEASE
36003636
dispatch_source_t theReadSource = readSource;
36013637
dispatch_source_t theWriteSource = writeSource;
3638+
#endif
36023639

36033640
dispatch_source_set_cancel_handler(readSource, ^{
36043641

36053642
LogVerbose(@"readCancelBlock");
36063643

3644+
#if NEEDS_DISPATCH_RETAIN_RELEASE
36073645
LogVerbose(@"dispatch_release(readSource)");
36083646
dispatch_release(theReadSource);
3647+
#endif
36093648

36103649
if (--socketFDRefCount == 0)
36113650
{
@@ -3618,8 +3657,10 @@ - (void)setupReadAndWriteSourcesForNewlyConnectedSocket:(int)socketFD
36183657

36193658
LogVerbose(@"writeCancelBlock");
36203659

3660+
#if NEEDS_DISPATCH_RETAIN_RELEASE
36213661
LogVerbose(@"dispatch_release(writeSource)");
36223662
dispatch_release(theWriteSource);
3663+
#endif
36233664

36243665
if (--socketFDRefCount == 0)
36253666
{
@@ -5027,11 +5068,13 @@ - (void)setupReadTimerWithTimeout:(NSTimeInterval)timeout
50275068
[self doReadTimeout];
50285069
}});
50295070

5071+
#if NEEDS_DISPATCH_RETAIN_RELEASE
50305072
dispatch_source_t theReadTimer = readTimer;
50315073
dispatch_source_set_cancel_handler(readTimer, ^{
50325074
LogVerbose(@"dispatch_release(readTimer)");
50335075
dispatch_release(theReadTimer);
50345076
});
5077+
#endif
50355078

50365079
dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (timeout * NSEC_PER_SEC));
50375080

@@ -5655,11 +5698,13 @@ - (void)setupWriteTimerWithTimeout:(NSTimeInterval)timeout
56555698
[self doWriteTimeout];
56565699
}});
56575700

5701+
#if NEEDS_DISPATCH_RETAIN_RELEASE
56585702
dispatch_source_t theWriteTimer = writeTimer;
56595703
dispatch_source_set_cancel_handler(writeTimer, ^{
56605704
LogVerbose(@"dispatch_release(writeTimer)");
56615705
dispatch_release(theWriteTimer);
56625706
});
5707+
#endif
56635708

56645709
dispatch_time_t tt = dispatch_time(DISPATCH_TIME_NOW, (timeout * NSEC_PER_SEC));
56655710

0 commit comments

Comments
 (0)