| /* |
| * Created by Phil on 1/08/2012. |
| * Copyright 2012 Two Blue Cubes Ltd. All rights reserved. |
| * |
| * Distributed under the Boost Software License, Version 1.0. (See accompanying |
| * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| */ |
| #ifndef TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED |
| #define TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED |
| |
| #import <Foundation/Foundation.h> |
| |
| #ifdef __has_feature |
| #define CATCH_ARC_ENABLED __has_feature(objc_arc) |
| #else |
| #define CATCH_ARC_ENABLED 0 |
| #endif |
| |
| void arcSafeRelease( NSObject* obj ); |
| id performOptionalSelector( id obj, SEL sel ); |
| |
| #if !CATCH_ARC_ENABLED |
| inline void arcSafeRelease( NSObject* obj ) { |
| [obj release]; |
| } |
| inline id performOptionalSelector( id obj, SEL sel ) { |
| if( [obj respondsToSelector: sel] ) |
| return [obj performSelector: sel]; |
| return nil; |
| } |
| #define CATCH_UNSAFE_UNRETAINED |
| #define CATCH_ARC_STRONG |
| #else |
| inline void arcSafeRelease( NSObject* ){} |
| inline id performOptionalSelector( id obj, SEL sel ) { |
| #ifdef __clang__ |
| #pragma clang diagnostic push |
| #pragma clang diagnostic ignored "-Warc-performSelector-leaks" |
| #endif |
| if( [obj respondsToSelector: sel] ) |
| return [obj performSelector: sel]; |
| #ifdef __clang__ |
| #pragma clang diagnostic pop |
| #endif |
| return nil; |
| } |
| #define CATCH_UNSAFE_UNRETAINED __unsafe_unretained |
| #define CATCH_ARC_STRONG __strong |
| #endif |
| |
| #endif // TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED |