13
13
// For more information see: https://github.com/robbiehanson/CocoaAsyncSocket/wiki/ARC
14
14
#endif
15
15
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
+
16
42
#import " GCDAsyncSocket.h"
17
43
18
44
#if TARGET_OS_IPHONE
@@ -972,12 +998,11 @@ - (id)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq socketQu
972
998
if ((self = [super init ]))
973
999
{
974
1000
delegate = aDelegate;
1001
+ delegateQueue = dq;
975
1002
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
981
1006
982
1007
socket4FD = SOCKET_NULL;
983
1008
socket6FD = SOCKET_NULL;
@@ -992,8 +1017,10 @@ - (id)initWithDelegate:(id)aDelegate delegateQueue:(dispatch_queue_t)dq socketQu
992
1017
NSAssert (sq != dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ),
993
1018
@"The given socketQueue parameter must not be a concurrent queue.");
994
1019
995
- dispatch_retain (sq);
996
1020
socketQueue = sq;
1021
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
1022
+ dispatch_retain (sq);
1023
+ #endif
997
1024
}
998
1025
else
999
1026
{
@@ -1027,12 +1054,15 @@ - (void)dealloc
1027
1054
}
1028
1055
1029
1056
delegate = nil ;
1030
- if (delegateQueue)
1031
- dispatch_release (delegateQueue);
1057
+
1058
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
1059
+ if (delegateQueue) dispatch_release (delegateQueue);
1060
+ #endif
1032
1061
delegateQueue = NULL ;
1033
1062
1034
- if (socketQueue)
1035
- dispatch_release (socketQueue);
1063
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
1064
+ if (socketQueue) dispatch_release (socketQueue);
1065
+ #endif
1036
1066
socketQueue = NULL ;
1037
1067
1038
1068
LogInfo (@" %@ - %@ (finish)" , THIS_METHOD, self);
@@ -1109,11 +1139,10 @@ - (void)setDelegateQueue:(dispatch_queue_t)newDelegateQueue synchronously:(BOOL)
1109
1139
{
1110
1140
dispatch_block_t block = ^{
1111
1141
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
1117
1146
1118
1147
delegateQueue = newDelegateQueue;
1119
1148
};
@@ -1167,11 +1196,10 @@ - (void)setDelegate:(id)newDelegate delegateQueue:(dispatch_queue_t)newDelegateQ
1167
1196
1168
1197
delegate = newDelegate;
1169
1198
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
1175
1203
1176
1204
delegateQueue = newDelegateQueue;
1177
1205
};
@@ -1612,8 +1640,10 @@ - (BOOL)acceptOnInterface:(NSString *)inInterface port:(uint16_t)port error:(NSE
1612
1640
1613
1641
dispatch_source_set_cancel_handler (accept4Source, ^{
1614
1642
1643
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
1615
1644
LogVerbose (@" dispatch_release(accept4Source)" );
1616
1645
dispatch_release (acceptSource);
1646
+ #endif
1617
1647
1618
1648
LogVerbose (@" close(socket4FD)" );
1619
1649
close (socketFD);
@@ -1644,8 +1674,10 @@ - (BOOL)acceptOnInterface:(NSString *)inInterface port:(uint16_t)port error:(NSE
1644
1674
1645
1675
dispatch_source_set_cancel_handler (accept6Source, ^{
1646
1676
1677
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
1647
1678
LogVerbose (@" dispatch_release(accept6Source)" );
1648
1679
dispatch_release (acceptSource);
1680
+ #endif
1649
1681
1650
1682
LogVerbose (@" close(socket6FD)" );
1651
1683
close (socketFD);
@@ -1779,8 +1811,9 @@ - (BOOL)doAccept:(int)parentSocketFD
1779
1811
}
1780
1812
1781
1813
// 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
1784
1817
1785
1818
// The accepted socket should have been retained by the delegate.
1786
1819
// Otherwise it gets properly released when exiting the block.
@@ -2533,11 +2566,13 @@ - (void)startConnectTimeout:(NSTimeInterval)timeout
2533
2566
[self doConnectTimeout ];
2534
2567
}});
2535
2568
2569
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
2536
2570
dispatch_source_t theConnectTimer = connectTimer;
2537
2571
dispatch_source_set_cancel_handler (connectTimer, ^{
2538
2572
LogVerbose (@" dispatch_release(connectTimer)" );
2539
2573
dispatch_release (theConnectTimer);
2540
2574
});
2575
+ #endif
2541
2576
2542
2577
dispatch_time_t tt = dispatch_time (DISPATCH_TIME_NOW, (timeout * NSEC_PER_SEC));
2543
2578
dispatch_source_set_timer (connectTimer, tt, DISPATCH_TIME_FOREVER, 0 );
@@ -3597,15 +3632,19 @@ - (void)setupReadAndWriteSourcesForNewlyConnectedSocket:(int)socketFD
3597
3632
3598
3633
__block int socketFDRefCount = 2 ;
3599
3634
3635
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
3600
3636
dispatch_source_t theReadSource = readSource;
3601
3637
dispatch_source_t theWriteSource = writeSource;
3638
+ #endif
3602
3639
3603
3640
dispatch_source_set_cancel_handler (readSource, ^{
3604
3641
3605
3642
LogVerbose (@" readCancelBlock" );
3606
3643
3644
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
3607
3645
LogVerbose (@" dispatch_release(readSource)" );
3608
3646
dispatch_release (theReadSource);
3647
+ #endif
3609
3648
3610
3649
if (--socketFDRefCount == 0 )
3611
3650
{
@@ -3618,8 +3657,10 @@ - (void)setupReadAndWriteSourcesForNewlyConnectedSocket:(int)socketFD
3618
3657
3619
3658
LogVerbose (@" writeCancelBlock" );
3620
3659
3660
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
3621
3661
LogVerbose (@" dispatch_release(writeSource)" );
3622
3662
dispatch_release (theWriteSource);
3663
+ #endif
3623
3664
3624
3665
if (--socketFDRefCount == 0 )
3625
3666
{
@@ -5027,11 +5068,13 @@ - (void)setupReadTimerWithTimeout:(NSTimeInterval)timeout
5027
5068
[self doReadTimeout ];
5028
5069
}});
5029
5070
5071
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
5030
5072
dispatch_source_t theReadTimer = readTimer;
5031
5073
dispatch_source_set_cancel_handler (readTimer, ^{
5032
5074
LogVerbose (@" dispatch_release(readTimer)" );
5033
5075
dispatch_release (theReadTimer);
5034
5076
});
5077
+ #endif
5035
5078
5036
5079
dispatch_time_t tt = dispatch_time (DISPATCH_TIME_NOW, (timeout * NSEC_PER_SEC));
5037
5080
@@ -5655,11 +5698,13 @@ - (void)setupWriteTimerWithTimeout:(NSTimeInterval)timeout
5655
5698
[self doWriteTimeout ];
5656
5699
}});
5657
5700
5701
+ #if NEEDS_DISPATCH_RETAIN_RELEASE
5658
5702
dispatch_source_t theWriteTimer = writeTimer;
5659
5703
dispatch_source_set_cancel_handler (writeTimer, ^{
5660
5704
LogVerbose (@" dispatch_release(writeTimer)" );
5661
5705
dispatch_release (theWriteTimer);
5662
5706
});
5707
+ #endif
5663
5708
5664
5709
dispatch_time_t tt = dispatch_time (DISPATCH_TIME_NOW, (timeout * NSEC_PER_SEC));
5665
5710
0 commit comments