浏览代码

__unsafe_unretained does not prevent self retain-cycles when not under ARC

Pierre-Olivier Latour 11 年之前
父节点
当前提交
efad06f506
共有 3 个文件被更改,包括 12 次插入0 次删除
  1. 4 0
      CGDWebServer/GCDWebServer.m
  2. 4 0
      GCDWebDAVServer/GCDWebDAVServer.m
  3. 4 0
      GCDWebUploader/GCDWebUploader.m

+ 4 - 0
CGDWebServer/GCDWebServer.m

@@ -663,7 +663,11 @@ static void _NetServiceClientCallBack(CFNetServiceRef service, CFStreamError* er
 
 
 - (void)addGETHandlerForBasePath:(NSString*)basePath directoryPath:(NSString*)directoryPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)cacheAge allowRangeRequests:(BOOL)allowRangeRequests {
 - (void)addGETHandlerForBasePath:(NSString*)basePath directoryPath:(NSString*)directoryPath indexFilename:(NSString*)indexFilename cacheAge:(NSUInteger)cacheAge allowRangeRequests:(BOOL)allowRangeRequests {
   if ([basePath hasPrefix:@"/"] && [basePath hasSuffix:@"/"]) {
   if ([basePath hasPrefix:@"/"] && [basePath hasSuffix:@"/"]) {
+#if __has_feature(objc_arc)
     GCDWebServer* __unsafe_unretained server = self;
     GCDWebServer* __unsafe_unretained server = self;
+#else
+    __block GCDWebServer* server = self;
+#endif
     [self addHandlerWithMatchBlock:^GCDWebServerRequest *(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) {
     [self addHandlerWithMatchBlock:^GCDWebServerRequest *(NSString* requestMethod, NSURL* requestURL, NSDictionary* requestHeaders, NSString* urlPath, NSDictionary* urlQuery) {
       
       
       if (![requestMethod isEqualToString:@"GET"]) {
       if (![requestMethod isEqualToString:@"GET"]) {

+ 4 - 0
GCDWebDAVServer/GCDWebDAVServer.m

@@ -561,7 +561,11 @@ static inline xmlNodePtr _XMLChildWithName(xmlNodePtr child, const xmlChar* name
 - (instancetype)initWithUploadDirectory:(NSString*)path {
 - (instancetype)initWithUploadDirectory:(NSString*)path {
   if ((self = [super init])) {
   if ((self = [super init])) {
     _uploadDirectory = [[path stringByStandardizingPath] copy];
     _uploadDirectory = [[path stringByStandardizingPath] copy];
+#if __has_feature(objc_arc)
     GCDWebDAVServer* __unsafe_unretained server = self;
     GCDWebDAVServer* __unsafe_unretained server = self;
+#else
+    __block GCDWebDAVServer* server = self;
+#endif
     
     
     // 9.1 PROPFIND method
     // 9.1 PROPFIND method
     [self addDefaultHandlerForMethod:@"PROPFIND" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
     [self addDefaultHandlerForMethod:@"PROPFIND" requestClass:[GCDWebServerDataRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {

+ 4 - 0
GCDWebUploader/GCDWebUploader.m

@@ -277,7 +277,11 @@
       return nil;
       return nil;
     }
     }
     _uploadDirectory = [[path stringByStandardizingPath] copy];
     _uploadDirectory = [[path stringByStandardizingPath] copy];
+#if __has_feature(objc_arc)
     GCDWebUploader* __unsafe_unretained server = self;
     GCDWebUploader* __unsafe_unretained server = self;
+#else
+    __block GCDWebUploader* server = self;
+#endif
     
     
     // Resource files
     // Resource files
     [self addGETHandlerForBasePath:@"/" directoryPath:[siteBundle resourcePath] indexFilename:nil cacheAge:3600 allowRangeRequests:NO];
     [self addGETHandlerForBasePath:@"/" directoryPath:[siteBundle resourcePath] indexFilename:nil cacheAge:3600 allowRangeRequests:NO];