├── DEMO ├── DeallocCallback.xcworkspace │ └── contents.xcworkspacedata ├── MSDeallocCallback.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── MSDeallocCallback │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── icon-1024@2x.png │ │ │ ├── icon-20-ipad.png │ │ │ ├── icon-20@2x-ipad.png │ │ │ ├── icon-20@2x.png │ │ │ ├── icon-20@3x.png │ │ │ ├── icon-29-ipad.png │ │ │ ├── icon-29.png │ │ │ ├── icon-29@2x-ipad.png │ │ │ ├── icon-29@2x.png │ │ │ ├── icon-29@3x.png │ │ │ ├── icon-40.png │ │ │ ├── icon-40@2x.png │ │ │ ├── icon-40@3x.png │ │ │ ├── icon-50.png │ │ │ ├── icon-50@2x.png │ │ │ ├── icon-57.png │ │ │ ├── icon-57@2x.png │ │ │ ├── icon-60@2x.png │ │ │ ├── icon-60@3x.png │ │ │ ├── icon-72.png │ │ │ ├── icon-72@2x.png │ │ │ ├── icon-76.png │ │ │ ├── icon-76@2x.png │ │ │ └── icon-83.5@2x.png │ │ ├── Contents.json │ │ └── LaunchImage.launchimage │ │ │ ├── 1024iPadPortraitWOSBiOS56_768x1004pt.png │ │ │ ├── 1024iPadPortraitWOSBiOS56_768x1004pt@2x.png │ │ │ ├── 1024iPadPortraitiOS56_768x1024pt.png │ │ │ ├── 1024iPadPortraitiOS56_768x1024pt@2x.png │ │ │ ├── 1024iPadPortraitiOS789_768x1024pt.png │ │ │ ├── 1024iPadPortraitiOS789_768x1024pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS56_320x480pt.png │ │ │ ├── 1024iPhonePortraitiOS56_320x480pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS56_320x568pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS789_320x480pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS789_320x568pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS89_375x667pt@2x.png │ │ │ ├── 1024iPhonePortraitiOS89_414x736pt@3x.png │ │ │ └── Contents.json │ ├── Info.plist │ ├── SecondViewController.h │ ├── SecondViewController.m │ ├── ViewController.h │ ├── ViewController.m │ └── main.m ├── Podfile ├── Podfile.lock └── Pods │ ├── Headers │ ├── Private │ │ └── MSDeallocCallBack │ │ │ └── NSObject+MSDeallocCallBack.h │ └── Public │ │ └── MSDeallocCallBack │ │ └── NSObject+MSDeallocCallBack.h │ ├── MSDeallocCallBack │ ├── DeallocCallback │ │ ├── NSObject+MSDeallocCallBack.h │ │ └── NSObject+MSDeallocCallBack.m │ ├── LICENSE │ └── README.md │ ├── Manifest.lock │ ├── Pods.xcodeproj │ └── project.pbxproj │ └── Target Support Files │ ├── MSDeallocCallBack │ ├── MSDeallocCallBack-dummy.m │ ├── MSDeallocCallBack-prefix.pch │ └── MSDeallocCallBack.xcconfig │ └── Pods-DeallocCallback │ ├── Pods-DeallocCallback-acknowledgements.markdown │ ├── Pods-DeallocCallback-acknowledgements.plist │ ├── Pods-DeallocCallback-dummy.m │ ├── Pods-DeallocCallback-frameworks.sh │ ├── Pods-DeallocCallback-resources.sh │ ├── Pods-DeallocCallback.debug.xcconfig │ └── Pods-DeallocCallback.release.xcconfig ├── LICENSE ├── MSDeallocCallBack.podspec ├── MSDeallocCallback ├── NSObject+MSDeallocCallBack.h └── NSObject+MSDeallocCallBack.m └── README.md /DEMO/DeallocCallback.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 096275A01EF4E007003BB2C3 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 0962759F1EF4E007003BB2C3 /* main.m */; }; 11 | 096275A31EF4E007003BB2C3 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 096275A21EF4E007003BB2C3 /* AppDelegate.m */; }; 12 | 096275A61EF4E007003BB2C3 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 096275A51EF4E007003BB2C3 /* ViewController.m */; }; 13 | 096275AB1EF4E007003BB2C3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 096275AA1EF4E007003BB2C3 /* Assets.xcassets */; }; 14 | 096275BA1EF4E445003BB2C3 /* SecondViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 096275B91EF4E445003BB2C3 /* SecondViewController.m */; }; 15 | F5D741BF039D521B66D6D91E /* libPods-DeallocCallback.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A9AE54C81A54C1E640294E88 /* libPods-DeallocCallback.a */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXFileReference section */ 19 | 0962759B1EF4E006003BB2C3 /* MSDeallocCallback.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MSDeallocCallback.app; sourceTree = BUILT_PRODUCTS_DIR; }; 20 | 0962759F1EF4E007003BB2C3 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 21 | 096275A11EF4E007003BB2C3 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 22 | 096275A21EF4E007003BB2C3 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 23 | 096275A41EF4E007003BB2C3 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 24 | 096275A51EF4E007003BB2C3 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 25 | 096275AA1EF4E007003BB2C3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 26 | 096275AF1EF4E007003BB2C3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 27 | 096275B81EF4E445003BB2C3 /* SecondViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SecondViewController.h; sourceTree = ""; }; 28 | 096275B91EF4E445003BB2C3 /* SecondViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SecondViewController.m; sourceTree = ""; }; 29 | A9AE54C81A54C1E640294E88 /* libPods-DeallocCallback.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DeallocCallback.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 30 | DAE32FFAF9428281451CF244 /* Pods-DeallocCallback.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DeallocCallback.release.xcconfig"; path = "Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback.release.xcconfig"; sourceTree = ""; }; 31 | E3F0D0F5106B8EAA7E22CF9C /* Pods-DeallocCallback.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-DeallocCallback.debug.xcconfig"; path = "Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback.debug.xcconfig"; sourceTree = ""; }; 32 | /* End PBXFileReference section */ 33 | 34 | /* Begin PBXFrameworksBuildPhase section */ 35 | 096275981EF4E006003BB2C3 /* Frameworks */ = { 36 | isa = PBXFrameworksBuildPhase; 37 | buildActionMask = 2147483647; 38 | files = ( 39 | F5D741BF039D521B66D6D91E /* libPods-DeallocCallback.a in Frameworks */, 40 | ); 41 | runOnlyForDeploymentPostprocessing = 0; 42 | }; 43 | /* End PBXFrameworksBuildPhase section */ 44 | 45 | /* Begin PBXGroup section */ 46 | 096275921EF4E006003BB2C3 = { 47 | isa = PBXGroup; 48 | children = ( 49 | 0962759D1EF4E006003BB2C3 /* MSDeallocCallback */, 50 | 0962759C1EF4E006003BB2C3 /* Products */, 51 | 661C4D2F74F3AA2235347601 /* Pods */, 52 | 164E6826E4C1F27F998BBAC8 /* Frameworks */, 53 | ); 54 | sourceTree = ""; 55 | }; 56 | 0962759C1EF4E006003BB2C3 /* Products */ = { 57 | isa = PBXGroup; 58 | children = ( 59 | 0962759B1EF4E006003BB2C3 /* MSDeallocCallback.app */, 60 | ); 61 | name = Products; 62 | sourceTree = ""; 63 | }; 64 | 0962759D1EF4E006003BB2C3 /* MSDeallocCallback */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | 096275A11EF4E007003BB2C3 /* AppDelegate.h */, 68 | 096275A21EF4E007003BB2C3 /* AppDelegate.m */, 69 | 096275A41EF4E007003BB2C3 /* ViewController.h */, 70 | 096275A51EF4E007003BB2C3 /* ViewController.m */, 71 | 096275B81EF4E445003BB2C3 /* SecondViewController.h */, 72 | 096275B91EF4E445003BB2C3 /* SecondViewController.m */, 73 | 096275AA1EF4E007003BB2C3 /* Assets.xcassets */, 74 | 096275AF1EF4E007003BB2C3 /* Info.plist */, 75 | 0962759E1EF4E007003BB2C3 /* Supporting Files */, 76 | ); 77 | path = MSDeallocCallback; 78 | sourceTree = ""; 79 | }; 80 | 0962759E1EF4E007003BB2C3 /* Supporting Files */ = { 81 | isa = PBXGroup; 82 | children = ( 83 | 0962759F1EF4E007003BB2C3 /* main.m */, 84 | ); 85 | name = "Supporting Files"; 86 | sourceTree = ""; 87 | }; 88 | 164E6826E4C1F27F998BBAC8 /* Frameworks */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | A9AE54C81A54C1E640294E88 /* libPods-DeallocCallback.a */, 92 | ); 93 | name = Frameworks; 94 | sourceTree = ""; 95 | }; 96 | 661C4D2F74F3AA2235347601 /* Pods */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | E3F0D0F5106B8EAA7E22CF9C /* Pods-DeallocCallback.debug.xcconfig */, 100 | DAE32FFAF9428281451CF244 /* Pods-DeallocCallback.release.xcconfig */, 101 | ); 102 | name = Pods; 103 | sourceTree = ""; 104 | }; 105 | /* End PBXGroup section */ 106 | 107 | /* Begin PBXNativeTarget section */ 108 | 0962759A1EF4E006003BB2C3 /* MSDeallocCallback */ = { 109 | isa = PBXNativeTarget; 110 | buildConfigurationList = 096275B21EF4E007003BB2C3 /* Build configuration list for PBXNativeTarget "MSDeallocCallback" */; 111 | buildPhases = ( 112 | 6B0BF333B94DF218529839F5 /* [CP] Check Pods Manifest.lock */, 113 | 096275971EF4E006003BB2C3 /* Sources */, 114 | 096275981EF4E006003BB2C3 /* Frameworks */, 115 | 096275991EF4E006003BB2C3 /* Resources */, 116 | 1BC9EFA18CA7CAF07769408C /* [CP] Embed Pods Frameworks */, 117 | 43D7C0CAF74016DA885B2973 /* [CP] Copy Pods Resources */, 118 | ); 119 | buildRules = ( 120 | ); 121 | dependencies = ( 122 | ); 123 | name = MSDeallocCallback; 124 | productName = DeallocCallback; 125 | productReference = 0962759B1EF4E006003BB2C3 /* MSDeallocCallback.app */; 126 | productType = "com.apple.product-type.application"; 127 | }; 128 | /* End PBXNativeTarget section */ 129 | 130 | /* Begin PBXProject section */ 131 | 096275931EF4E006003BB2C3 /* Project object */ = { 132 | isa = PBXProject; 133 | attributes = { 134 | LastUpgradeCheck = 0910; 135 | ORGANIZATIONNAME = J; 136 | TargetAttributes = { 137 | 0962759A1EF4E006003BB2C3 = { 138 | CreatedOnToolsVersion = 8.0; 139 | ProvisioningStyle = Manual; 140 | }; 141 | }; 142 | }; 143 | buildConfigurationList = 096275961EF4E006003BB2C3 /* Build configuration list for PBXProject "MSDeallocCallback" */; 144 | compatibilityVersion = "Xcode 3.2"; 145 | developmentRegion = English; 146 | hasScannedForEncodings = 0; 147 | knownRegions = ( 148 | en, 149 | Base, 150 | ); 151 | mainGroup = 096275921EF4E006003BB2C3; 152 | productRefGroup = 0962759C1EF4E006003BB2C3 /* Products */; 153 | projectDirPath = ""; 154 | projectRoot = ""; 155 | targets = ( 156 | 0962759A1EF4E006003BB2C3 /* MSDeallocCallback */, 157 | ); 158 | }; 159 | /* End PBXProject section */ 160 | 161 | /* Begin PBXResourcesBuildPhase section */ 162 | 096275991EF4E006003BB2C3 /* Resources */ = { 163 | isa = PBXResourcesBuildPhase; 164 | buildActionMask = 2147483647; 165 | files = ( 166 | 096275AB1EF4E007003BB2C3 /* Assets.xcassets in Resources */, 167 | ); 168 | runOnlyForDeploymentPostprocessing = 0; 169 | }; 170 | /* End PBXResourcesBuildPhase section */ 171 | 172 | /* Begin PBXShellScriptBuildPhase section */ 173 | 1BC9EFA18CA7CAF07769408C /* [CP] Embed Pods Frameworks */ = { 174 | isa = PBXShellScriptBuildPhase; 175 | buildActionMask = 2147483647; 176 | files = ( 177 | ); 178 | inputPaths = ( 179 | ); 180 | name = "[CP] Embed Pods Frameworks"; 181 | outputPaths = ( 182 | ); 183 | runOnlyForDeploymentPostprocessing = 0; 184 | shellPath = /bin/sh; 185 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback-frameworks.sh\"\n"; 186 | showEnvVarsInLog = 0; 187 | }; 188 | 43D7C0CAF74016DA885B2973 /* [CP] Copy Pods Resources */ = { 189 | isa = PBXShellScriptBuildPhase; 190 | buildActionMask = 2147483647; 191 | files = ( 192 | ); 193 | inputPaths = ( 194 | ); 195 | name = "[CP] Copy Pods Resources"; 196 | outputPaths = ( 197 | ); 198 | runOnlyForDeploymentPostprocessing = 0; 199 | shellPath = /bin/sh; 200 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback-resources.sh\"\n"; 201 | showEnvVarsInLog = 0; 202 | }; 203 | 6B0BF333B94DF218529839F5 /* [CP] Check Pods Manifest.lock */ = { 204 | isa = PBXShellScriptBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | ); 208 | inputPaths = ( 209 | ); 210 | name = "[CP] Check Pods Manifest.lock"; 211 | outputPaths = ( 212 | ); 213 | runOnlyForDeploymentPostprocessing = 0; 214 | shellPath = /bin/sh; 215 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 216 | showEnvVarsInLog = 0; 217 | }; 218 | /* End PBXShellScriptBuildPhase section */ 219 | 220 | /* Begin PBXSourcesBuildPhase section */ 221 | 096275971EF4E006003BB2C3 /* Sources */ = { 222 | isa = PBXSourcesBuildPhase; 223 | buildActionMask = 2147483647; 224 | files = ( 225 | 096275BA1EF4E445003BB2C3 /* SecondViewController.m in Sources */, 226 | 096275A61EF4E007003BB2C3 /* ViewController.m in Sources */, 227 | 096275A31EF4E007003BB2C3 /* AppDelegate.m in Sources */, 228 | 096275A01EF4E007003BB2C3 /* main.m in Sources */, 229 | ); 230 | runOnlyForDeploymentPostprocessing = 0; 231 | }; 232 | /* End PBXSourcesBuildPhase section */ 233 | 234 | /* Begin XCBuildConfiguration section */ 235 | 096275B01EF4E007003BB2C3 /* Debug */ = { 236 | isa = XCBuildConfiguration; 237 | buildSettings = { 238 | ALWAYS_SEARCH_USER_PATHS = NO; 239 | CLANG_ANALYZER_NONNULL = YES; 240 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 241 | CLANG_CXX_LIBRARY = "libc++"; 242 | CLANG_ENABLE_MODULES = YES; 243 | CLANG_ENABLE_OBJC_ARC = YES; 244 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 245 | CLANG_WARN_BOOL_CONVERSION = YES; 246 | CLANG_WARN_COMMA = YES; 247 | CLANG_WARN_CONSTANT_CONVERSION = YES; 248 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 249 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 250 | CLANG_WARN_EMPTY_BODY = YES; 251 | CLANG_WARN_ENUM_CONVERSION = YES; 252 | CLANG_WARN_INFINITE_RECURSION = YES; 253 | CLANG_WARN_INT_CONVERSION = YES; 254 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 255 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 258 | CLANG_WARN_STRICT_PROTOTYPES = YES; 259 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 260 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 261 | CLANG_WARN_UNREACHABLE_CODE = YES; 262 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 263 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 264 | COPY_PHASE_STRIP = NO; 265 | DEBUG_INFORMATION_FORMAT = dwarf; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | ENABLE_TESTABILITY = YES; 268 | GCC_C_LANGUAGE_STANDARD = gnu99; 269 | GCC_DYNAMIC_NO_PIC = NO; 270 | GCC_NO_COMMON_BLOCKS = YES; 271 | GCC_OPTIMIZATION_LEVEL = 0; 272 | GCC_PREPROCESSOR_DEFINITIONS = ( 273 | "DEBUG=1", 274 | "$(inherited)", 275 | ); 276 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 277 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 278 | GCC_WARN_UNDECLARED_SELECTOR = YES; 279 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 280 | GCC_WARN_UNUSED_FUNCTION = YES; 281 | GCC_WARN_UNUSED_VARIABLE = YES; 282 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 283 | MTL_ENABLE_DEBUG_INFO = YES; 284 | ONLY_ACTIVE_ARCH = YES; 285 | SDKROOT = iphoneos; 286 | TARGETED_DEVICE_FAMILY = "1,2"; 287 | }; 288 | name = Debug; 289 | }; 290 | 096275B11EF4E007003BB2C3 /* Release */ = { 291 | isa = XCBuildConfiguration; 292 | buildSettings = { 293 | ALWAYS_SEARCH_USER_PATHS = NO; 294 | CLANG_ANALYZER_NONNULL = YES; 295 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 296 | CLANG_CXX_LIBRARY = "libc++"; 297 | CLANG_ENABLE_MODULES = YES; 298 | CLANG_ENABLE_OBJC_ARC = YES; 299 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 300 | CLANG_WARN_BOOL_CONVERSION = YES; 301 | CLANG_WARN_COMMA = YES; 302 | CLANG_WARN_CONSTANT_CONVERSION = YES; 303 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 304 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 305 | CLANG_WARN_EMPTY_BODY = YES; 306 | CLANG_WARN_ENUM_CONVERSION = YES; 307 | CLANG_WARN_INFINITE_RECURSION = YES; 308 | CLANG_WARN_INT_CONVERSION = YES; 309 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 310 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 311 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 312 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 313 | CLANG_WARN_STRICT_PROTOTYPES = YES; 314 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 315 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 316 | CLANG_WARN_UNREACHABLE_CODE = YES; 317 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 318 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 319 | COPY_PHASE_STRIP = NO; 320 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 321 | ENABLE_NS_ASSERTIONS = NO; 322 | ENABLE_STRICT_OBJC_MSGSEND = YES; 323 | GCC_C_LANGUAGE_STANDARD = gnu99; 324 | GCC_NO_COMMON_BLOCKS = YES; 325 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 326 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 327 | GCC_WARN_UNDECLARED_SELECTOR = YES; 328 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 329 | GCC_WARN_UNUSED_FUNCTION = YES; 330 | GCC_WARN_UNUSED_VARIABLE = YES; 331 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 332 | MTL_ENABLE_DEBUG_INFO = NO; 333 | SDKROOT = iphoneos; 334 | TARGETED_DEVICE_FAMILY = "1,2"; 335 | VALIDATE_PRODUCT = YES; 336 | }; 337 | name = Release; 338 | }; 339 | 096275B31EF4E007003BB2C3 /* Debug */ = { 340 | isa = XCBuildConfiguration; 341 | baseConfigurationReference = E3F0D0F5106B8EAA7E22CF9C /* Pods-DeallocCallback.debug.xcconfig */; 342 | buildSettings = { 343 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 344 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 345 | CODE_SIGN_STYLE = Manual; 346 | DEVELOPMENT_TEAM = ""; 347 | INFOPLIST_FILE = "$(SRCROOT)/MSDeallocCallback/Info.plist"; 348 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 349 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 350 | PRODUCT_BUNDLE_IDENTIFIER = jzj.DeallocCallback; 351 | PRODUCT_NAME = "$(TARGET_NAME)"; 352 | PROVISIONING_PROFILE_SPECIFIER = ""; 353 | TARGETED_DEVICE_FAMILY = 1; 354 | }; 355 | name = Debug; 356 | }; 357 | 096275B41EF4E007003BB2C3 /* Release */ = { 358 | isa = XCBuildConfiguration; 359 | baseConfigurationReference = DAE32FFAF9428281451CF244 /* Pods-DeallocCallback.release.xcconfig */; 360 | buildSettings = { 361 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 362 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 363 | CODE_SIGN_STYLE = Manual; 364 | DEVELOPMENT_TEAM = ""; 365 | INFOPLIST_FILE = "$(SRCROOT)/MSDeallocCallback/Info.plist"; 366 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 367 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 368 | PRODUCT_BUNDLE_IDENTIFIER = jzj.DeallocCallback; 369 | PRODUCT_NAME = "$(TARGET_NAME)"; 370 | PROVISIONING_PROFILE_SPECIFIER = ""; 371 | TARGETED_DEVICE_FAMILY = 1; 372 | }; 373 | name = Release; 374 | }; 375 | /* End XCBuildConfiguration section */ 376 | 377 | /* Begin XCConfigurationList section */ 378 | 096275961EF4E006003BB2C3 /* Build configuration list for PBXProject "MSDeallocCallback" */ = { 379 | isa = XCConfigurationList; 380 | buildConfigurations = ( 381 | 096275B01EF4E007003BB2C3 /* Debug */, 382 | 096275B11EF4E007003BB2C3 /* Release */, 383 | ); 384 | defaultConfigurationIsVisible = 0; 385 | defaultConfigurationName = Release; 386 | }; 387 | 096275B21EF4E007003BB2C3 /* Build configuration list for PBXNativeTarget "MSDeallocCallback" */ = { 388 | isa = XCConfigurationList; 389 | buildConfigurations = ( 390 | 096275B31EF4E007003BB2C3 /* Debug */, 391 | 096275B41EF4E007003BB2C3 /* Release */, 392 | ); 393 | defaultConfigurationIsVisible = 0; 394 | defaultConfigurationName = Release; 395 | }; 396 | /* End XCConfigurationList section */ 397 | }; 398 | rootObject = 096275931EF4E006003BB2C3 /* Project object */; 399 | } 400 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | 12 | @implementation AppDelegate 13 | 14 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 15 | self.window = [UIWindow new]; 16 | self.window.frame = [UIScreen mainScreen].bounds; 17 | self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:ViewController.new]; 18 | [self.window makeKeyAndVisible]; 19 | return YES; 20 | } 21 | @end 22 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "icon-20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "icon-20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-29.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "icon-29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "icon-29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "icon-40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "icon-40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "57x57", 47 | "idiom" : "iphone", 48 | "filename" : "icon-57.png", 49 | "scale" : "1x" 50 | }, 51 | { 52 | "size" : "57x57", 53 | "idiom" : "iphone", 54 | "filename" : "icon-57@2x.png", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "size" : "60x60", 59 | "idiom" : "iphone", 60 | "filename" : "icon-60@2x.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "60x60", 65 | "idiom" : "iphone", 66 | "filename" : "icon-60@3x.png", 67 | "scale" : "3x" 68 | }, 69 | { 70 | "size" : "20x20", 71 | "idiom" : "ipad", 72 | "filename" : "icon-20-ipad.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "20x20", 77 | "idiom" : "ipad", 78 | "filename" : "icon-20@2x-ipad.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "29x29", 83 | "idiom" : "ipad", 84 | "filename" : "icon-29-ipad.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "29x29", 89 | "idiom" : "ipad", 90 | "filename" : "icon-29@2x-ipad.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "40x40", 95 | "idiom" : "ipad", 96 | "filename" : "icon-40.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "40x40", 101 | "idiom" : "ipad", 102 | "filename" : "icon-40@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "50x50", 107 | "idiom" : "ipad", 108 | "filename" : "icon-50.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "50x50", 113 | "idiom" : "ipad", 114 | "filename" : "icon-50@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "72x72", 119 | "idiom" : "ipad", 120 | "filename" : "icon-72.png", 121 | "scale" : "1x" 122 | }, 123 | { 124 | "size" : "72x72", 125 | "idiom" : "ipad", 126 | "filename" : "icon-72@2x.png", 127 | "scale" : "2x" 128 | }, 129 | { 130 | "size" : "76x76", 131 | "idiom" : "ipad", 132 | "filename" : "icon-76.png", 133 | "scale" : "1x" 134 | }, 135 | { 136 | "size" : "76x76", 137 | "idiom" : "ipad", 138 | "filename" : "icon-76@2x.png", 139 | "scale" : "2x" 140 | }, 141 | { 142 | "size" : "83.5x83.5", 143 | "idiom" : "ipad", 144 | "filename" : "icon-83.5@2x.png", 145 | "scale" : "2x" 146 | }, 147 | { 148 | "size" : "1024x1024", 149 | "idiom" : "ios-marketing", 150 | "filename" : "icon-1024@2x.png", 151 | "scale" : "1x" 152 | } 153 | ], 154 | "info" : { 155 | "version" : 1, 156 | "author" : "xcode" 157 | } 158 | } -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-1024@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-1024@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-50.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-57.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-72.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitWOSBiOS56_768x1004pt@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS56_768x1024pt@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPadPortraitiOS789_768x1024pt@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x480pt@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x568pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS56_320x568pt@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x480pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x480pt@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x568pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS789_320x568pt@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_375x667pt@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_375x667pt@2x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_414x736pt@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tempAccountA/MSCustomOperation/42f73e1da8df49011736e16ee2087360cc335c12/DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/1024iPhonePortraitiOS89_414x736pt@3x.png -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Assets.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "extent" : "full-screen", 5 | "idiom" : "iphone", 6 | "subtype" : "736h", 7 | "filename" : "1024iPhonePortraitiOS89_414x736pt@3x.png", 8 | "minimum-system-version" : "8.0", 9 | "orientation" : "portrait", 10 | "scale" : "3x" 11 | }, 12 | { 13 | "extent" : "full-screen", 14 | "idiom" : "iphone", 15 | "subtype" : "667h", 16 | "filename" : "1024iPhonePortraitiOS89_375x667pt@2x.png", 17 | "minimum-system-version" : "8.0", 18 | "orientation" : "portrait", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "orientation" : "portrait", 23 | "idiom" : "iphone", 24 | "filename" : "1024iPhonePortraitiOS789_320x480pt@2x.png", 25 | "extent" : "full-screen", 26 | "minimum-system-version" : "7.0", 27 | "scale" : "2x" 28 | }, 29 | { 30 | "extent" : "full-screen", 31 | "idiom" : "iphone", 32 | "subtype" : "retina4", 33 | "filename" : "1024iPhonePortraitiOS789_320x568pt@2x.png", 34 | "minimum-system-version" : "7.0", 35 | "orientation" : "portrait", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "orientation" : "portrait", 40 | "idiom" : "ipad", 41 | "filename" : "1024iPadPortraitiOS789_768x1024pt.png", 42 | "extent" : "full-screen", 43 | "minimum-system-version" : "7.0", 44 | "scale" : "1x" 45 | }, 46 | { 47 | "orientation" : "portrait", 48 | "idiom" : "ipad", 49 | "filename" : "1024iPadPortraitiOS789_768x1024pt@2x.png", 50 | "extent" : "full-screen", 51 | "minimum-system-version" : "7.0", 52 | "scale" : "2x" 53 | }, 54 | { 55 | "orientation" : "portrait", 56 | "idiom" : "iphone", 57 | "filename" : "1024iPhonePortraitiOS56_320x480pt.png", 58 | "extent" : "full-screen", 59 | "scale" : "1x" 60 | }, 61 | { 62 | "orientation" : "portrait", 63 | "idiom" : "iphone", 64 | "filename" : "1024iPhonePortraitiOS56_320x480pt@2x.png", 65 | "extent" : "full-screen", 66 | "scale" : "2x" 67 | }, 68 | { 69 | "orientation" : "portrait", 70 | "idiom" : "iphone", 71 | "filename" : "1024iPhonePortraitiOS56_320x568pt@2x.png", 72 | "extent" : "full-screen", 73 | "subtype" : "retina4", 74 | "scale" : "2x" 75 | }, 76 | { 77 | "orientation" : "portrait", 78 | "idiom" : "ipad", 79 | "filename" : "1024iPadPortraitWOSBiOS56_768x1004pt.png", 80 | "extent" : "to-status-bar", 81 | "scale" : "1x" 82 | }, 83 | { 84 | "orientation" : "portrait", 85 | "idiom" : "ipad", 86 | "filename" : "1024iPadPortraitiOS56_768x1024pt.png", 87 | "extent" : "full-screen", 88 | "scale" : "1x" 89 | }, 90 | { 91 | "orientation" : "portrait", 92 | "idiom" : "ipad", 93 | "filename" : "1024iPadPortraitWOSBiOS56_768x1004pt@2x.png", 94 | "extent" : "to-status-bar", 95 | "scale" : "2x" 96 | }, 97 | { 98 | "orientation" : "portrait", 99 | "idiom" : "ipad", 100 | "filename" : "1024iPadPortraitiOS56_768x1024pt@2x.png", 101 | "extent" : "full-screen", 102 | "scale" : "2x" 103 | } 104 | ], 105 | "info" : { 106 | "version" : 1, 107 | "author" : "xcode" 108 | } 109 | } -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIRequiredDeviceCapabilities 26 | 27 | armv7 28 | 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | 33 | UISupportedInterfaceOrientations~ipad 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationPortraitUpsideDown 37 | UIInterfaceOrientationLandscapeLeft 38 | UIInterfaceOrientationLandscapeRight 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/SecondViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // SecondViewController.h 3 | // 4 | // Created by J on 2017/6/17. 5 | // 6 | 7 | #import 8 | 9 | @interface SecondViewController : UIViewController 10 | 11 | @end 12 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/SecondViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // SecondViewController.m 3 | // 4 | // Created by J on 2017/6/17. 5 | // 6 | 7 | #import "SecondViewController.h" 8 | 9 | @interface SecondViewController () 10 | 11 | @end 12 | 13 | @implementation SecondViewController 14 | 15 | - (void)viewDidLoad { 16 | [super viewDidLoad]; 17 | 18 | self.view.backgroundColor = [UIColor whiteColor]; 19 | } 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "SecondViewController.h" 11 | #import "NSObject+MSDeallocCallBack.h" 12 | 13 | @interface ViewController () 14 | @property(nonatomic,assign)SecondViewController* sc; 15 | 16 | @end 17 | 18 | @implementation ViewController 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | self.view.backgroundColor = [UIColor whiteColor]; 23 | } 24 | 25 | 26 | 27 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 28 | 29 | 30 | NSLog(@"xxxx%@",self.sc); 31 | SecondViewController* sc = [SecondViewController new]; 32 | [self.navigationController pushViewController:sc animated:YES]; 33 | self.sc = sc; 34 | 35 | WEAKSELF 36 | [self.sc deallocCallBack:^{ 37 | weakSelf.sc = nil; 38 | NSLog(@"xxxx%@",weakSelf.sc); 39 | 40 | }]; 41 | } 42 | 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /DEMO/MSDeallocCallback/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DEMO/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'DeallocCallback' do 5 | # Uncomment the next line if you're using Swift or would like to use dynamic frameworks 6 | # use_frameworks! 7 | pod “MSDeallocCallBack” 8 | # Pods for DeallocCallback 9 | 10 | end 11 | -------------------------------------------------------------------------------- /DEMO/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MSDeallocCallBack (1.0.0) 3 | 4 | DEPENDENCIES: 5 | - MSDeallocCallBack 6 | 7 | SPEC CHECKSUMS: 8 | MSDeallocCallBack: 1218849fc26d4fd8a99a8ac857482b464df97904 9 | 10 | PODFILE CHECKSUM: 71b67bc6918cc8a738660d959773a5ec74e11c94 11 | 12 | COCOAPODS: 1.1.1 13 | -------------------------------------------------------------------------------- /DEMO/Pods/Headers/Private/MSDeallocCallBack/NSObject+MSDeallocCallBack.h: -------------------------------------------------------------------------------- 1 | ../../../MSDeallocCallBack/DeallocCallback/NSObject+MSDeallocCallBack.h -------------------------------------------------------------------------------- /DEMO/Pods/Headers/Public/MSDeallocCallBack/NSObject+MSDeallocCallBack.h: -------------------------------------------------------------------------------- 1 | ../../../MSDeallocCallBack/DeallocCallback/NSObject+MSDeallocCallBack.h -------------------------------------------------------------------------------- /DEMO/Pods/MSDeallocCallBack/DeallocCallback/NSObject+MSDeallocCallBack.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+MSDeallocCallBack.h 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void (^DeallocExecutorBlock)(void); 11 | #define WEAKSELF __weak typeof(self) weakSelf = self; 12 | @interface NSObject (MSDeallocCallBack) 13 | 14 | - (void)deallocCallBack:(DeallocExecutorBlock)block; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /DEMO/Pods/MSDeallocCallBack/DeallocCallback/NSObject+MSDeallocCallBack.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+MSDeallocCallBack.m 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | 10 | 11 | #import "NSObject+MSDeallocCallBack.h" 12 | #import 13 | 14 | const void *kDeallocExecutorsKey = &kDeallocExecutorsKey; 15 | const void *kBlockKey = &kBlockKey; 16 | 17 | @interface CallBackItem : NSObject 18 | 19 | @end 20 | @implementation NSObject (MSDeallocCallBack) 21 | 22 | - (void)deallocCallBack:(DeallocExecutorBlock)block{ 23 | 24 | 25 | if (!block) return; 26 | 27 | CallBackItem* obj = [CallBackItem new]; 28 | objc_setAssociatedObject(self, kDeallocExecutorsKey, obj, OBJC_ASSOCIATION_RETAIN); 29 | 30 | objc_setAssociatedObject(obj, kBlockKey,block, OBJC_ASSOCIATION_COPY_NONATOMIC); 31 | } 32 | 33 | @end 34 | 35 | 36 | 37 | 38 | @implementation CallBackItem 39 | 40 | - (void)dealloc{ 41 | 42 | DeallocExecutorBlock block = objc_getAssociatedObject(self,kBlockKey); 43 | block ? block() : nil; 44 | 45 | } 46 | @end 47 | -------------------------------------------------------------------------------- /DEMO/Pods/MSDeallocCallBack/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /DEMO/Pods/MSDeallocCallBack/README.md: -------------------------------------------------------------------------------- 1 | # MSDeallocCallback -------------------------------------------------------------------------------- /DEMO/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MSDeallocCallBack (1.0.0) 3 | 4 | DEPENDENCIES: 5 | - MSDeallocCallBack 6 | 7 | SPEC CHECKSUMS: 8 | MSDeallocCallBack: 1218849fc26d4fd8a99a8ac857482b464df97904 9 | 10 | PODFILE CHECKSUM: 71b67bc6918cc8a738660d959773a5ec74e11c94 11 | 12 | COCOAPODS: 1.1.1 13 | -------------------------------------------------------------------------------- /DEMO/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0A11AAA52291376A00BEF9D8E3B4DC98 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; 11 | 3EDFBC4937A0CDB9F02B396B28836CE9 /* NSObject+MSDeallocCallBack.h in Headers */ = {isa = PBXBuildFile; fileRef = 6935C83C29675F493D8DDF60326380D8 /* NSObject+MSDeallocCallBack.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | 8E9D37E92F0C0ADF64F456CDF259DDA4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */; }; 13 | 9677B65C2C8F74039E59C1527DE5DCA2 /* NSObject+MSDeallocCallBack.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EE7F70B810E6606E4CBE44F7B7754BA /* NSObject+MSDeallocCallBack.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; 14 | C623E04F773CFF79E78C64880298BD3C /* Pods-DeallocCallback-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D29ED17ACB6C83AD83D9EA0C5264FAC8 /* Pods-DeallocCallback-dummy.m */; }; 15 | C76A39B1435C467C397DC5F17ED92F5B /* MSDeallocCallBack-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F799F8FACB7B7A8015595D69948D3F6 /* MSDeallocCallBack-dummy.m */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXContainerItemProxy section */ 19 | B3923E0B21DC37BB3BDAD909651B6B5D /* PBXContainerItemProxy */ = { 20 | isa = PBXContainerItemProxy; 21 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 22 | proxyType = 1; 23 | remoteGlobalIDString = 8885C2213A7ED3764CB5A6D4D3ECC378; 24 | remoteInfo = MSDeallocCallBack; 25 | }; 26 | /* End PBXContainerItemProxy section */ 27 | 28 | /* Begin PBXFileReference section */ 29 | 6935C83C29675F493D8DDF60326380D8 /* NSObject+MSDeallocCallBack.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+MSDeallocCallBack.h"; path = "DeallocCallback/NSObject+MSDeallocCallBack.h"; sourceTree = ""; }; 30 | 6EE7F70B810E6606E4CBE44F7B7754BA /* NSObject+MSDeallocCallBack.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSObject+MSDeallocCallBack.m"; path = "DeallocCallback/NSObject+MSDeallocCallBack.m"; sourceTree = ""; }; 31 | 6F799F8FACB7B7A8015595D69948D3F6 /* MSDeallocCallBack-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MSDeallocCallBack-dummy.m"; sourceTree = ""; }; 32 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 33 | 9468779A3812D5B5673AA11F6A902D90 /* Pods-DeallocCallback.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DeallocCallback.debug.xcconfig"; sourceTree = ""; }; 34 | 9BB06C16176EDE8E9F1285500ECE1FB6 /* Pods-DeallocCallback.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DeallocCallback.release.xcconfig"; sourceTree = ""; }; 35 | A0F4B9E13B6345C8D224933C971BB419 /* MSDeallocCallBack-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MSDeallocCallBack-prefix.pch"; sourceTree = ""; }; 36 | ACC1CD5ED8ED010F2D81E93EF685911E /* Pods-DeallocCallback-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DeallocCallback-acknowledgements.markdown"; sourceTree = ""; }; 37 | B803C1EAD11F4A5ACE7205347D878ECF /* Pods-DeallocCallback-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DeallocCallback-resources.sh"; sourceTree = ""; }; 38 | CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 39 | CBBD4EE0FA1052E2858FDE3927C6F5E0 /* Pods-DeallocCallback-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-DeallocCallback-frameworks.sh"; sourceTree = ""; }; 40 | D29ED17ACB6C83AD83D9EA0C5264FAC8 /* Pods-DeallocCallback-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DeallocCallback-dummy.m"; sourceTree = ""; }; 41 | D9DC1F0B5A1F67370908F28E74E8372F /* libPods-DeallocCallback.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-DeallocCallback.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | E61D07733D51012DBACB2C1B2AEB0967 /* MSDeallocCallBack.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MSDeallocCallBack.xcconfig; sourceTree = ""; }; 43 | EF674926D4C145E533965EA9A94D984C /* Pods-DeallocCallback-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DeallocCallback-acknowledgements.plist"; sourceTree = ""; }; 44 | F190A2D51F04C82AEA0B91823A3A1ABE /* libMSDeallocCallBack.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMSDeallocCallBack.a; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | /* End PBXFileReference section */ 46 | 47 | /* Begin PBXFrameworksBuildPhase section */ 48 | 8FEF9E5C94F57690F5C7B52D7FABFDBE /* Frameworks */ = { 49 | isa = PBXFrameworksBuildPhase; 50 | buildActionMask = 2147483647; 51 | files = ( 52 | 0A11AAA52291376A00BEF9D8E3B4DC98 /* Foundation.framework in Frameworks */, 53 | ); 54 | runOnlyForDeploymentPostprocessing = 0; 55 | }; 56 | CA104D60427739318B6564CA7572FDE2 /* Frameworks */ = { 57 | isa = PBXFrameworksBuildPhase; 58 | buildActionMask = 2147483647; 59 | files = ( 60 | 8E9D37E92F0C0ADF64F456CDF259DDA4 /* Foundation.framework in Frameworks */, 61 | ); 62 | runOnlyForDeploymentPostprocessing = 0; 63 | }; 64 | /* End PBXFrameworksBuildPhase section */ 65 | 66 | /* Begin PBXGroup section */ 67 | 0070D18C54C439F4C61E1D34228CE6C0 /* Products */ = { 68 | isa = PBXGroup; 69 | children = ( 70 | F190A2D51F04C82AEA0B91823A3A1ABE /* libMSDeallocCallBack.a */, 71 | D9DC1F0B5A1F67370908F28E74E8372F /* libPods-DeallocCallback.a */, 72 | ); 73 | name = Products; 74 | sourceTree = ""; 75 | }; 76 | 032D0EE6AE4EC3E3ED6AA17C5F4B6919 /* Targets Support Files */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | F87729E0B44EE60B8FF520C1D3C111DD /* Pods-DeallocCallback */, 80 | ); 81 | name = "Targets Support Files"; 82 | sourceTree = ""; 83 | }; 84 | 2F3F28E75B182ABACA5D185629CE710C /* MSDeallocCallBack */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | 6935C83C29675F493D8DDF60326380D8 /* NSObject+MSDeallocCallBack.h */, 88 | 6EE7F70B810E6606E4CBE44F7B7754BA /* NSObject+MSDeallocCallBack.m */, 89 | D92DCFC490EF08CC01EC81604E355E0D /* Support Files */, 90 | ); 91 | path = MSDeallocCallBack; 92 | sourceTree = ""; 93 | }; 94 | 43AC254ABE9D992D7C807BAC42AC3816 /* Pods */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 2F3F28E75B182ABACA5D185629CE710C /* MSDeallocCallBack */, 98 | ); 99 | name = Pods; 100 | sourceTree = ""; 101 | }; 102 | 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */ = { 103 | isa = PBXGroup; 104 | children = ( 105 | CBB3DE36805AF21409EC968A9691732F /* Foundation.framework */, 106 | ); 107 | name = iOS; 108 | sourceTree = ""; 109 | }; 110 | 7DB346D0F39D3F0E887471402A8071AB = { 111 | isa = PBXGroup; 112 | children = ( 113 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 114 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 115 | 43AC254ABE9D992D7C807BAC42AC3816 /* Pods */, 116 | 0070D18C54C439F4C61E1D34228CE6C0 /* Products */, 117 | 032D0EE6AE4EC3E3ED6AA17C5F4B6919 /* Targets Support Files */, 118 | ); 119 | sourceTree = ""; 120 | }; 121 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | 7531C8F8DE19F1AA3C8A7AC97A91DC29 /* iOS */, 125 | ); 126 | name = Frameworks; 127 | sourceTree = ""; 128 | }; 129 | D92DCFC490EF08CC01EC81604E355E0D /* Support Files */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | E61D07733D51012DBACB2C1B2AEB0967 /* MSDeallocCallBack.xcconfig */, 133 | 6F799F8FACB7B7A8015595D69948D3F6 /* MSDeallocCallBack-dummy.m */, 134 | A0F4B9E13B6345C8D224933C971BB419 /* MSDeallocCallBack-prefix.pch */, 135 | ); 136 | name = "Support Files"; 137 | path = "../Target Support Files/MSDeallocCallBack"; 138 | sourceTree = ""; 139 | }; 140 | F87729E0B44EE60B8FF520C1D3C111DD /* Pods-DeallocCallback */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | ACC1CD5ED8ED010F2D81E93EF685911E /* Pods-DeallocCallback-acknowledgements.markdown */, 144 | EF674926D4C145E533965EA9A94D984C /* Pods-DeallocCallback-acknowledgements.plist */, 145 | D29ED17ACB6C83AD83D9EA0C5264FAC8 /* Pods-DeallocCallback-dummy.m */, 146 | CBBD4EE0FA1052E2858FDE3927C6F5E0 /* Pods-DeallocCallback-frameworks.sh */, 147 | B803C1EAD11F4A5ACE7205347D878ECF /* Pods-DeallocCallback-resources.sh */, 148 | 9468779A3812D5B5673AA11F6A902D90 /* Pods-DeallocCallback.debug.xcconfig */, 149 | 9BB06C16176EDE8E9F1285500ECE1FB6 /* Pods-DeallocCallback.release.xcconfig */, 150 | ); 151 | name = "Pods-DeallocCallback"; 152 | path = "Target Support Files/Pods-DeallocCallback"; 153 | sourceTree = ""; 154 | }; 155 | /* End PBXGroup section */ 156 | 157 | /* Begin PBXHeadersBuildPhase section */ 158 | EBD56C67428A10980E4B9203E09F6395 /* Headers */ = { 159 | isa = PBXHeadersBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | 3EDFBC4937A0CDB9F02B396B28836CE9 /* NSObject+MSDeallocCallBack.h in Headers */, 163 | ); 164 | runOnlyForDeploymentPostprocessing = 0; 165 | }; 166 | /* End PBXHeadersBuildPhase section */ 167 | 168 | /* Begin PBXNativeTarget section */ 169 | 8885C2213A7ED3764CB5A6D4D3ECC378 /* MSDeallocCallBack */ = { 170 | isa = PBXNativeTarget; 171 | buildConfigurationList = FB4DC1EDF459305C657411DDFD8C572E /* Build configuration list for PBXNativeTarget "MSDeallocCallBack" */; 172 | buildPhases = ( 173 | 188994E752DD2AE175EF9FFC9EF861FA /* Sources */, 174 | CA104D60427739318B6564CA7572FDE2 /* Frameworks */, 175 | EBD56C67428A10980E4B9203E09F6395 /* Headers */, 176 | ); 177 | buildRules = ( 178 | ); 179 | dependencies = ( 180 | ); 181 | name = MSDeallocCallBack; 182 | productName = MSDeallocCallBack; 183 | productReference = F190A2D51F04C82AEA0B91823A3A1ABE /* libMSDeallocCallBack.a */; 184 | productType = "com.apple.product-type.library.static"; 185 | }; 186 | FC3EA21647CFE77759F7ACE820B9F601 /* Pods-DeallocCallback */ = { 187 | isa = PBXNativeTarget; 188 | buildConfigurationList = BDC4CD55FA420D10379490280A1ED2CE /* Build configuration list for PBXNativeTarget "Pods-DeallocCallback" */; 189 | buildPhases = ( 190 | 62384BCDA6F30373F9A37C8E207013B2 /* Sources */, 191 | 8FEF9E5C94F57690F5C7B52D7FABFDBE /* Frameworks */, 192 | ); 193 | buildRules = ( 194 | ); 195 | dependencies = ( 196 | 15D0817D523EF3EFDF356BADDE240BC2 /* PBXTargetDependency */, 197 | ); 198 | name = "Pods-DeallocCallback"; 199 | productName = "Pods-DeallocCallback"; 200 | productReference = D9DC1F0B5A1F67370908F28E74E8372F /* libPods-DeallocCallback.a */; 201 | productType = "com.apple.product-type.library.static"; 202 | }; 203 | /* End PBXNativeTarget section */ 204 | 205 | /* Begin PBXProject section */ 206 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 207 | isa = PBXProject; 208 | attributes = { 209 | LastSwiftUpdateCheck = 0730; 210 | LastUpgradeCheck = 0910; 211 | }; 212 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 213 | compatibilityVersion = "Xcode 3.2"; 214 | developmentRegion = English; 215 | hasScannedForEncodings = 0; 216 | knownRegions = ( 217 | en, 218 | ); 219 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 220 | productRefGroup = 0070D18C54C439F4C61E1D34228CE6C0 /* Products */; 221 | projectDirPath = ""; 222 | projectRoot = ""; 223 | targets = ( 224 | 8885C2213A7ED3764CB5A6D4D3ECC378 /* MSDeallocCallBack */, 225 | FC3EA21647CFE77759F7ACE820B9F601 /* Pods-DeallocCallback */, 226 | ); 227 | }; 228 | /* End PBXProject section */ 229 | 230 | /* Begin PBXSourcesBuildPhase section */ 231 | 188994E752DD2AE175EF9FFC9EF861FA /* Sources */ = { 232 | isa = PBXSourcesBuildPhase; 233 | buildActionMask = 2147483647; 234 | files = ( 235 | C76A39B1435C467C397DC5F17ED92F5B /* MSDeallocCallBack-dummy.m in Sources */, 236 | 9677B65C2C8F74039E59C1527DE5DCA2 /* NSObject+MSDeallocCallBack.m in Sources */, 237 | ); 238 | runOnlyForDeploymentPostprocessing = 0; 239 | }; 240 | 62384BCDA6F30373F9A37C8E207013B2 /* Sources */ = { 241 | isa = PBXSourcesBuildPhase; 242 | buildActionMask = 2147483647; 243 | files = ( 244 | C623E04F773CFF79E78C64880298BD3C /* Pods-DeallocCallback-dummy.m in Sources */, 245 | ); 246 | runOnlyForDeploymentPostprocessing = 0; 247 | }; 248 | /* End PBXSourcesBuildPhase section */ 249 | 250 | /* Begin PBXTargetDependency section */ 251 | 15D0817D523EF3EFDF356BADDE240BC2 /* PBXTargetDependency */ = { 252 | isa = PBXTargetDependency; 253 | name = MSDeallocCallBack; 254 | target = 8885C2213A7ED3764CB5A6D4D3ECC378 /* MSDeallocCallBack */; 255 | targetProxy = B3923E0B21DC37BB3BDAD909651B6B5D /* PBXContainerItemProxy */; 256 | }; 257 | /* End PBXTargetDependency section */ 258 | 259 | /* Begin XCBuildConfiguration section */ 260 | 662AB2BD810C7A64B2F07CC5A6C20702 /* Debug */ = { 261 | isa = XCBuildConfiguration; 262 | baseConfigurationReference = 9468779A3812D5B5673AA11F6A902D90 /* Pods-DeallocCallback.debug.xcconfig */; 263 | buildSettings = { 264 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 265 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 266 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 267 | DEBUG_INFORMATION_FORMAT = dwarf; 268 | ENABLE_STRICT_OBJC_MSGSEND = YES; 269 | GCC_NO_COMMON_BLOCKS = YES; 270 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 271 | MACH_O_TYPE = staticlib; 272 | MTL_ENABLE_DEBUG_INFO = YES; 273 | OTHER_LDFLAGS = ""; 274 | OTHER_LIBTOOLFLAGS = ""; 275 | PODS_ROOT = "$(SRCROOT)"; 276 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 277 | PRODUCT_NAME = "$(TARGET_NAME)"; 278 | SDKROOT = iphoneos; 279 | SKIP_INSTALL = YES; 280 | }; 281 | name = Debug; 282 | }; 283 | 79B0C2E66EFA9917ED6EDDB8FC6A7684 /* Release */ = { 284 | isa = XCBuildConfiguration; 285 | buildSettings = { 286 | ALWAYS_SEARCH_USER_PATHS = NO; 287 | CLANG_ANALYZER_NONNULL = YES; 288 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 289 | CLANG_CXX_LIBRARY = "libc++"; 290 | CLANG_ENABLE_MODULES = YES; 291 | CLANG_ENABLE_OBJC_ARC = YES; 292 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 293 | CLANG_WARN_BOOL_CONVERSION = YES; 294 | CLANG_WARN_COMMA = YES; 295 | CLANG_WARN_CONSTANT_CONVERSION = YES; 296 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 297 | CLANG_WARN_EMPTY_BODY = YES; 298 | CLANG_WARN_ENUM_CONVERSION = YES; 299 | CLANG_WARN_INFINITE_RECURSION = YES; 300 | CLANG_WARN_INT_CONVERSION = YES; 301 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 302 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 303 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 304 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 305 | CLANG_WARN_STRICT_PROTOTYPES = YES; 306 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 307 | CLANG_WARN_UNREACHABLE_CODE = YES; 308 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 309 | CODE_SIGNING_REQUIRED = NO; 310 | COPY_PHASE_STRIP = YES; 311 | ENABLE_NS_ASSERTIONS = NO; 312 | ENABLE_STRICT_OBJC_MSGSEND = YES; 313 | GCC_C_LANGUAGE_STANDARD = gnu99; 314 | GCC_NO_COMMON_BLOCKS = YES; 315 | GCC_PREPROCESSOR_DEFINITIONS = ( 316 | "POD_CONFIGURATION_RELEASE=1", 317 | "$(inherited)", 318 | ); 319 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 320 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 321 | GCC_WARN_UNDECLARED_SELECTOR = YES; 322 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 323 | GCC_WARN_UNUSED_FUNCTION = YES; 324 | GCC_WARN_UNUSED_VARIABLE = YES; 325 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 326 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 327 | STRIP_INSTALLED_PRODUCT = NO; 328 | SYMROOT = "${SRCROOT}/../build"; 329 | VALIDATE_PRODUCT = YES; 330 | }; 331 | name = Release; 332 | }; 333 | A33F873AC3F4CEF09F6BC6F91247F59F /* Debug */ = { 334 | isa = XCBuildConfiguration; 335 | baseConfigurationReference = E61D07733D51012DBACB2C1B2AEB0967 /* MSDeallocCallBack.xcconfig */; 336 | buildSettings = { 337 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 338 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 339 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 340 | DEBUG_INFORMATION_FORMAT = dwarf; 341 | ENABLE_STRICT_OBJC_MSGSEND = YES; 342 | GCC_NO_COMMON_BLOCKS = YES; 343 | GCC_PREFIX_HEADER = "Target Support Files/MSDeallocCallBack/MSDeallocCallBack-prefix.pch"; 344 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 345 | MTL_ENABLE_DEBUG_INFO = YES; 346 | OTHER_LDFLAGS = ""; 347 | OTHER_LIBTOOLFLAGS = ""; 348 | PRIVATE_HEADERS_FOLDER_PATH = ""; 349 | PRODUCT_NAME = "$(TARGET_NAME)"; 350 | PUBLIC_HEADERS_FOLDER_PATH = ""; 351 | SDKROOT = iphoneos; 352 | SKIP_INSTALL = YES; 353 | }; 354 | name = Debug; 355 | }; 356 | CF7953F66E785E8876EB4D370D777D50 /* Debug */ = { 357 | isa = XCBuildConfiguration; 358 | buildSettings = { 359 | ALWAYS_SEARCH_USER_PATHS = NO; 360 | CLANG_ANALYZER_NONNULL = YES; 361 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 362 | CLANG_CXX_LIBRARY = "libc++"; 363 | CLANG_ENABLE_MODULES = YES; 364 | CLANG_ENABLE_OBJC_ARC = YES; 365 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 366 | CLANG_WARN_BOOL_CONVERSION = YES; 367 | CLANG_WARN_COMMA = YES; 368 | CLANG_WARN_CONSTANT_CONVERSION = YES; 369 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 370 | CLANG_WARN_EMPTY_BODY = YES; 371 | CLANG_WARN_ENUM_CONVERSION = YES; 372 | CLANG_WARN_INFINITE_RECURSION = YES; 373 | CLANG_WARN_INT_CONVERSION = YES; 374 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 375 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 376 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 377 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 378 | CLANG_WARN_STRICT_PROTOTYPES = YES; 379 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 380 | CLANG_WARN_UNREACHABLE_CODE = YES; 381 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 382 | CODE_SIGNING_REQUIRED = NO; 383 | COPY_PHASE_STRIP = NO; 384 | ENABLE_STRICT_OBJC_MSGSEND = YES; 385 | ENABLE_TESTABILITY = YES; 386 | GCC_C_LANGUAGE_STANDARD = gnu99; 387 | GCC_DYNAMIC_NO_PIC = NO; 388 | GCC_NO_COMMON_BLOCKS = YES; 389 | GCC_OPTIMIZATION_LEVEL = 0; 390 | GCC_PREPROCESSOR_DEFINITIONS = ( 391 | "POD_CONFIGURATION_DEBUG=1", 392 | "DEBUG=1", 393 | "$(inherited)", 394 | ); 395 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 396 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 397 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 398 | GCC_WARN_UNDECLARED_SELECTOR = YES; 399 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 400 | GCC_WARN_UNUSED_FUNCTION = YES; 401 | GCC_WARN_UNUSED_VARIABLE = YES; 402 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 403 | ONLY_ACTIVE_ARCH = YES; 404 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 405 | STRIP_INSTALLED_PRODUCT = NO; 406 | SYMROOT = "${SRCROOT}/../build"; 407 | }; 408 | name = Debug; 409 | }; 410 | F35A912E1CE2014504E45F325880BFD3 /* Release */ = { 411 | isa = XCBuildConfiguration; 412 | baseConfigurationReference = 9BB06C16176EDE8E9F1285500ECE1FB6 /* Pods-DeallocCallback.release.xcconfig */; 413 | buildSettings = { 414 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 415 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 416 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 417 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 418 | ENABLE_STRICT_OBJC_MSGSEND = YES; 419 | GCC_NO_COMMON_BLOCKS = YES; 420 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 421 | MACH_O_TYPE = staticlib; 422 | MTL_ENABLE_DEBUG_INFO = NO; 423 | OTHER_LDFLAGS = ""; 424 | OTHER_LIBTOOLFLAGS = ""; 425 | PODS_ROOT = "$(SRCROOT)"; 426 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 427 | PRODUCT_NAME = "$(TARGET_NAME)"; 428 | SDKROOT = iphoneos; 429 | SKIP_INSTALL = YES; 430 | }; 431 | name = Release; 432 | }; 433 | F6DDF808B7C951A1250F036322A90996 /* Release */ = { 434 | isa = XCBuildConfiguration; 435 | baseConfigurationReference = E61D07733D51012DBACB2C1B2AEB0967 /* MSDeallocCallBack.xcconfig */; 436 | buildSettings = { 437 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 438 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 439 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 440 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 441 | ENABLE_STRICT_OBJC_MSGSEND = YES; 442 | GCC_NO_COMMON_BLOCKS = YES; 443 | GCC_PREFIX_HEADER = "Target Support Files/MSDeallocCallBack/MSDeallocCallBack-prefix.pch"; 444 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 445 | MTL_ENABLE_DEBUG_INFO = NO; 446 | OTHER_LDFLAGS = ""; 447 | OTHER_LIBTOOLFLAGS = ""; 448 | PRIVATE_HEADERS_FOLDER_PATH = ""; 449 | PRODUCT_NAME = "$(TARGET_NAME)"; 450 | PUBLIC_HEADERS_FOLDER_PATH = ""; 451 | SDKROOT = iphoneos; 452 | SKIP_INSTALL = YES; 453 | }; 454 | name = Release; 455 | }; 456 | /* End XCBuildConfiguration section */ 457 | 458 | /* Begin XCConfigurationList section */ 459 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 460 | isa = XCConfigurationList; 461 | buildConfigurations = ( 462 | CF7953F66E785E8876EB4D370D777D50 /* Debug */, 463 | 79B0C2E66EFA9917ED6EDDB8FC6A7684 /* Release */, 464 | ); 465 | defaultConfigurationIsVisible = 0; 466 | defaultConfigurationName = Release; 467 | }; 468 | BDC4CD55FA420D10379490280A1ED2CE /* Build configuration list for PBXNativeTarget "Pods-DeallocCallback" */ = { 469 | isa = XCConfigurationList; 470 | buildConfigurations = ( 471 | 662AB2BD810C7A64B2F07CC5A6C20702 /* Debug */, 472 | F35A912E1CE2014504E45F325880BFD3 /* Release */, 473 | ); 474 | defaultConfigurationIsVisible = 0; 475 | defaultConfigurationName = Release; 476 | }; 477 | FB4DC1EDF459305C657411DDFD8C572E /* Build configuration list for PBXNativeTarget "MSDeallocCallBack" */ = { 478 | isa = XCConfigurationList; 479 | buildConfigurations = ( 480 | A33F873AC3F4CEF09F6BC6F91247F59F /* Debug */, 481 | F6DDF808B7C951A1250F036322A90996 /* Release */, 482 | ); 483 | defaultConfigurationIsVisible = 0; 484 | defaultConfigurationName = Release; 485 | }; 486 | /* End XCConfigurationList section */ 487 | }; 488 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 489 | } 490 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/MSDeallocCallBack/MSDeallocCallBack-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MSDeallocCallBack : NSObject 3 | @end 4 | @implementation PodsDummy_MSDeallocCallBack 5 | @end 6 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/MSDeallocCallBack/MSDeallocCallBack-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/MSDeallocCallBack/MSDeallocCallBack.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MSDeallocCallBack 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/MSDeallocCallBack" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSDeallocCallBack" 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 8 | SKIP_INSTALL = YES 9 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## MSDeallocCallBack 5 | 6 | MIT License 7 | 8 | Copyright (c) 2017 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2017 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | MSDeallocCallBack 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_DeallocCallback : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_DeallocCallback 5 | @end 6 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | install_resource() 27 | { 28 | if [[ "$1" = /* ]] ; then 29 | RESOURCE_PATH="$1" 30 | else 31 | RESOURCE_PATH="${PODS_ROOT}/$1" 32 | fi 33 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 34 | cat << EOM 35 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 36 | EOM 37 | exit 1 38 | fi 39 | case $RESOURCE_PATH in 40 | *.storyboard) 41 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 42 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 43 | ;; 44 | *.xib) 45 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 46 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 47 | ;; 48 | *.framework) 49 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 50 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 51 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 52 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | ;; 54 | *.xcdatamodel) 55 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 56 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 57 | ;; 58 | *.xcdatamodeld) 59 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 60 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 61 | ;; 62 | *.xcmappingmodel) 63 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 64 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 65 | ;; 66 | *.xcassets) 67 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 68 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 69 | ;; 70 | *) 71 | echo "$RESOURCE_PATH" 72 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 73 | ;; 74 | esac 75 | } 76 | 77 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 78 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 79 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 80 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | fi 83 | rm -f "$RESOURCES_TO_COPY" 84 | 85 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 86 | then 87 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 88 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 89 | while read line; do 90 | if [[ $line != "${PODS_ROOT}*" ]]; then 91 | XCASSET_FILES+=("$line") 92 | fi 93 | done <<<"$OTHER_XCASSETS" 94 | 95 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | fi 97 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSDeallocCallBack" 4 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/MSDeallocCallBack" 5 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSDeallocCallBack" 6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"MSDeallocCallBack" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /DEMO/Pods/Target Support Files/Pods-DeallocCallback/Pods-DeallocCallback.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/MSDeallocCallBack" 4 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/MSDeallocCallBack" 5 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/MSDeallocCallBack" 6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"MSDeallocCallBack" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 sureJiang0 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MSDeallocCallBack.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |s| 3 | 4 | s.name="MSDeallocCallBack" 5 | s.version="1.0.0" 6 | s.summary="MSDeallocCallBack" 7 | s.homepage="https://github.com/sureJiang0/MSDeallocCallback.git" 8 | s.license={:type=>"MIT",:file=>"LICENSE"} 9 | s.author={"jiang.zijia"=>"1140752635@qq.com"} 10 | s.platform=:ios,"5.0" 11 | s.source={:git => "https://github.com/sureJiang0/MSDeallocCallback.git",:tag=> s.version } 12 | s.source_files = "DeallocCallback/NSObject+MSDeallocCallBack.{h,m}" 13 | 14 | s.requires_arc=true 15 | 16 | end 17 | -------------------------------------------------------------------------------- /MSDeallocCallback/NSObject+MSDeallocCallBack.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+MSDeallocCallBack.h 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | #import 10 | typedef void (^DeallocExecutorBlock)(void); 11 | #define WEAKSELF __weak typeof(self) weakSelf = self; 12 | @interface NSObject (MSDeallocCallBack) 13 | 14 | - (void)deallocCallBack:(DeallocExecutorBlock)block; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /MSDeallocCallback/NSObject+MSDeallocCallBack.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+MSDeallocCallBack.m 3 | // DeallocCallback 4 | // 5 | // Created by J on 2017/6/17. 6 | // Copyright © 2017年 J. All rights reserved. 7 | // 8 | 9 | 10 | 11 | #import "NSObject+MSDeallocCallBack.h" 12 | #import 13 | 14 | const void *kDeallocExecutorsKey = &kDeallocExecutorsKey; 15 | const void *kBlockKey = &kBlockKey; 16 | 17 | @interface CallBackItem : NSObject 18 | 19 | @end 20 | @implementation NSObject (MSDeallocCallBack) 21 | 22 | - (void)deallocCallBack:(DeallocExecutorBlock)block{ 23 | 24 | 25 | if (!block) return; 26 | 27 | CallBackItem* obj = [CallBackItem new]; 28 | objc_setAssociatedObject(self, kDeallocExecutorsKey, obj, OBJC_ASSOCIATION_RETAIN); 29 | 30 | objc_setAssociatedObject(obj, kBlockKey,block, OBJC_ASSOCIATION_COPY_NONATOMIC); 31 | } 32 | 33 | @end 34 | 35 | 36 | 37 | 38 | @implementation CallBackItem 39 | 40 | - (void)dealloc{ 41 | 42 | DeallocExecutorBlock block = objc_getAssociatedObject(self,kBlockKey); 43 | block ? block() : nil; 44 | 45 | } 46 | @end 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UIButton-Blocks 2 | 3 | [![platform](http://img.shields.io/cocoapods/p/YYKit.svg?style=flat)](https://www.apple.com/nl/ios/) 4 | [![GitHub license](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat)](https://github.com/JZJJZJ/MSDeallocCallback/blob/master/LICENSE) 5 | [![CocoaPods](http://img.shields.io/cocoapods/v/YYKit.svg?style=flat)](http://cocoapods.org/?q=MSDeallocCallback) 6 | 7 | 8 | ## Features 9 | 10 | - block syntax 11 | 12 | ## Installation 13 | 14 | ### Cocoapods(Recommended) 15 | 16 | 1. Add `pod 'MSDeallocCallBack'` to your Podfile. 17 | 2. Run `pod install` 18 | 19 | ### Manual 20 | 21 | 1. Add all files under `MSDeallocCallback` to your project 22 | 23 | ## Requirements 24 | 25 | - iOS 5.0 and greater 26 | - ARC 27 | 28 | 29 | ## How To Use 30 | 31 | ```objc 32 | 33 | Objective-C: 34 | 35 | #import "NSObject+MSDeallocCallBack.h" 36 | 37 | @property(nonatomic,assign)SecondViewController* sc; 38 | 39 | WEAKSELF 40 | [self.sc deallocCallBack:^{ 41 | weakSelf.sc = nil; 42 | NSLog(@"xxxx%@",weakSelf.sc); 43 | 44 | }]; 45 | ``` 46 | ## License 47 | 48 | MSDeallocCallback is available under the MIT license. See the LICENSE file for more info. 49 | --------------------------------------------------------------------------------