diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 6b480d4..aef821b 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,5 +1,7 @@ PODS: - - RBSOdometer (0.1.0) + - RBSOdometer (0.1.1): + - RBSReuseQueue (~> 0.1.0) + - RBSReuseQueue (0.1.0) DEPENDENCIES: - RBSOdometer (from `../`) @@ -9,7 +11,8 @@ EXTERNAL SOURCES: :path: ../ SPEC CHECKSUMS: - RBSOdometer: 3377f8673b137a7fd2b76e17ab57bcc9a8136a35 + RBSOdometer: e4316ff6cc6f0859f5d40c7a864a1758c98618ca + RBSReuseQueue: 7272b27c8349c9eea5302c1166c12cba0968b152 PODFILE CHECKSUM: c8c0cd0645eab7d6cebf696bafff03fcdcccf0ec diff --git a/Example/Pods/Local Podspecs/RBSOdometer.podspec.json b/Example/Pods/Local Podspecs/RBSOdometer.podspec.json index e965f3b..f574d8c 100644 --- a/Example/Pods/Local Podspecs/RBSOdometer.podspec.json +++ b/Example/Pods/Local Podspecs/RBSOdometer.podspec.json @@ -1,8 +1,7 @@ { "name": "RBSOdometer", - "version": "0.1.0", + "version": "0.1.1", "summary": "RBSOdometer is a ObjC library for smoothly transitioning numbers..", - "description": "TODO: Add long description of the pod here.", "homepage": "https://github.com/RbBtSn0w/RBSOdometer", "license": { "type": "MIT", @@ -13,10 +12,18 @@ }, "source": { "git": "https://github.com/RbBtSn0w/RBSOdometer.git", - "tag": "0.1.0" + "tag": "0.1.1" }, + "requires_arc": true, + "social_media_url": "https://twitter.com/RbBtSn0w", "platforms": { "ios": "7.0" }, - "source_files": "RBSOdometer/Classes/**/*" + "source_files": "RBSOdometer/Classes/*.{h,m}", + "frameworks": "UIKit", + "dependencies": { + "RBSReuseQueue": [ + "~> 0.1.0" + ] + } } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 6b480d4..aef821b 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,5 +1,7 @@ PODS: - - RBSOdometer (0.1.0) + - RBSOdometer (0.1.1): + - RBSReuseQueue (~> 0.1.0) + - RBSReuseQueue (0.1.0) DEPENDENCIES: - RBSOdometer (from `../`) @@ -9,7 +11,8 @@ EXTERNAL SOURCES: :path: ../ SPEC CHECKSUMS: - RBSOdometer: 3377f8673b137a7fd2b76e17ab57bcc9a8136a35 + RBSOdometer: e4316ff6cc6f0859f5d40c7a864a1758c98618ca + RBSReuseQueue: 7272b27c8349c9eea5302c1166c12cba0968b152 PODFILE CHECKSUM: c8c0cd0645eab7d6cebf696bafff03fcdcccf0ec diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 1e858c1..0c335f9 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,103 +7,169 @@ objects = { /* Begin PBXBuildFile section */ - 01FC7A35BF4D3B4818BAC1B6A92F1A71 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; - 0FF119A37BD9D74DC2E6ACFB45AD8460 /* Pods-RBSOdometer_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F2D1E40C3314F5C5627E58862C02B5 /* Pods-RBSOdometer_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01FC7A35BF4D3B4818BAC1B6A92F1A71 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DB4212249AA7354010AB3A613C24D9 /* Foundation.framework */; }; + 12C6537256B973F2F69A04D39B7CBDA7 /* Pods-RBSOdometer_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 01018FD764ACDDC37A7FDFBC36AF049D /* Pods-RBSOdometer_Example-dummy.m */; }; 1B792A62A9EFBF87E8668533E6393367 /* Pods-RBSOdometer_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C86BE71D2EA7AD49E1117873828251FC /* Pods-RBSOdometer_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22A249D395372829CE7DE8903071B704 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; - 7BC221682E51C1C312D3BC49C0C1583D /* RBSOdometerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 149046BB0AE92E70782CA58BCE841E73 /* RBSOdometerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 28D5B6D1539718F340E978724C4F1686 /* RBSReuseQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = B790BDC1B9037103FF0EE097AC3DEF2C /* RBSReuseQueue.m */; }; + 328F146262A0C9264E536629FD475193 /* RBSOdometer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B30441E8D5A9593EC4CEEA8EBB77A1AD /* RBSOdometer-dummy.m */; }; + 38EF3FB6327DFB25C887C7563E3C64B2 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0217D99058421146CCE3B0C2AFE2988E /* UIKit.framework */; }; + 3A5D2CCAC02F13A28DAFEEA30EF665B0 /* Pods-RBSOdometer_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 92F2D1E40C3314F5C5627E58862C02B5 /* Pods-RBSOdometer_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3C84EAB91AA195D34A4248A1383BD73B /* RBSReuseQueue.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 041B23C97132DA96B8701B8CFA007DFB /* RBSReuseQueue.framework */; }; + 63735284B7F0BD1E889B80EAF7822DBA /* RBSOdometer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6131B201F1AEB3BD48770A2E509EAD3D /* RBSOdometer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 698458E192829B3AEA191E7FF841ABBE /* RBSReuseQueue-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 923A328B73264EB3306F39C08E2ADD08 /* RBSReuseQueue-dummy.m */; }; + 86EB3D82A3672A947ACCAAD69245367B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DB4212249AA7354010AB3A613C24D9 /* Foundation.framework */; }; + 93BA1306E5B3BEF8C69F609E6B44584F /* RBSReuseQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BF960A91804E6BD9664A4223955719 /* RBSReuseQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; 969916E95110FD6C3978801AFE5B56A8 /* Pods-RBSOdometer_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 98E3C3F3A2ADA74705A4A50B4CAF7DB3 /* Pods-RBSOdometer_Tests-dummy.m */; }; - 9A636DE6F196AE501984BAE3D50B53E1 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; - ADAB26D00A8B34CA7B2D90860D5F462E /* RBSOdometerView.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E5F29B7D76D7CD78BFB4277253F3CE /* RBSOdometerView.m */; }; - BA55B47D5BE5D99F4EC116814318B320 /* RBSOdometer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B30441E8D5A9593EC4CEEA8EBB77A1AD /* RBSOdometer-dummy.m */; }; - E30561B63063ECA76D6301237B0AC0A0 /* Pods-RBSOdometer_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 01018FD764ACDDC37A7FDFBC36AF049D /* Pods-RBSOdometer_Example-dummy.m */; }; - E5188A4D8826D96CA7776C98CB502C2F /* RBSOdometer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6131B201F1AEB3BD48770A2E509EAD3D /* RBSOdometer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A98144519CF275E93C1585FB05CED137 /* RBSOdometerView.m in Sources */ = {isa = PBXBuildFile; fileRef = B5E5F29B7D76D7CD78BFB4277253F3CE /* RBSOdometerView.m */; }; + A9AC6308DA23D546E7CB33EE4BC96D38 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DB4212249AA7354010AB3A613C24D9 /* Foundation.framework */; }; + B53A8C99968CAE48A5B76F0D9695FC1D /* RBSReusableDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = AF058E445EE72BD178B51AB52B202286 /* RBSReusableDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C1E3ECDC91190D75B3BEDE85AD82C776 /* RBSReuseQueue-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 482011CA9345179205C537C581C03C34 /* RBSReuseQueue-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D49149793F80B4E7E0C2EC7D35AE930E /* RBSOdometerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 149046BB0AE92E70782CA58BCE841E73 /* RBSOdometerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DB05964A2402E48E2B26E0B3BF565095 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6DB4212249AA7354010AB3A613C24D9 /* Foundation.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0A406E286CCFA373B22A6CFE4433220A /* PBXContainerItemProxy */ = { + 66ECBA775255015CF125245508D47A27 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = D60E6AD6040D9D31F2E6A8B7D9B0AF7B; + remoteGlobalIDString = A46A9C671B39A14436BC2F007E33AB9F; + remoteInfo = RBSReuseQueue; + }; + B9ECD1F714B59AAF20C1E5F26577C8F9 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 250DC430D833BAA34DE8A9F26767EF84; remoteInfo = RBSOdometer; }; + FF5CB14C4A31D988D2E4C66F058FF6BB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; + proxyType = 1; + remoteGlobalIDString = A46A9C671B39A14436BC2F007E33AB9F; + remoteInfo = RBSReuseQueue; + }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 01018FD764ACDDC37A7FDFBC36AF049D /* Pods-RBSOdometer_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RBSOdometer_Example-dummy.m"; sourceTree = ""; }; - 0DBAD2732EA39A1E387906EF444B5214 /* Pods_RBSOdometer_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RBSOdometer_Example.framework; path = "Pods-RBSOdometer_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; + 0217D99058421146CCE3B0C2AFE2988E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + 028B9E2FC2D5CECBAE0172218810D70D /* RBSReuseQueue-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RBSReuseQueue-prefix.pch"; sourceTree = ""; }; + 041B23C97132DA96B8701B8CFA007DFB /* RBSReuseQueue.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RBSReuseQueue.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0E6BEB5ED59573C2A943B00405C4A6CE /* RBSReuseQueue.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RBSReuseQueue.xcconfig; sourceTree = ""; }; 1042C2F6DC44B9291EC75478D68CCEDE /* Pods-RBSOdometer_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RBSOdometer_Example-resources.sh"; sourceTree = ""; }; 149046BB0AE92E70782CA58BCE841E73 /* RBSOdometerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RBSOdometerView.h; path = RBSOdometer/Classes/RBSOdometerView.h; sourceTree = ""; }; 1738EC4C20F78A6111E29670BC86FA80 /* Pods-RBSOdometer_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RBSOdometer_Example.debug.xcconfig"; sourceTree = ""; }; 1EBFB70583C394509B51E3AE02D25B1F /* Pods-RBSOdometer_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RBSOdometer_Tests.debug.xcconfig"; sourceTree = ""; }; 2809335BD5707B34C3860C63A8B32750 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 429F44EE6CC9AB0674450DA5C5DE5A21 /* Pods-RBSOdometer_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RBSOdometer_Example-acknowledgements.plist"; sourceTree = ""; }; + 482011CA9345179205C537C581C03C34 /* RBSReuseQueue-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RBSReuseQueue-umbrella.h"; sourceTree = ""; }; + 4C0E8E619337BCFEA5D48AA215BA11BF /* RBSReuseQueue.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = RBSReuseQueue.modulemap; sourceTree = ""; }; + 51BF960A91804E6BD9664A4223955719 /* RBSReuseQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RBSReuseQueue.h; path = RBSReuseQueue/Classes/RBSReuseQueue.h; sourceTree = ""; }; 5553A7510211D78857C6B0662B1D33CC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 5A008314FC3A57C995CA5F4D624E3A4F /* Pods-RBSOdometer_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RBSOdometer_Tests-acknowledgements.plist"; sourceTree = ""; }; 6131B201F1AEB3BD48770A2E509EAD3D /* RBSOdometer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RBSOdometer-umbrella.h"; sourceTree = ""; }; - 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 6CEEDC6D564C38F1A54D7A11EAADF2F6 /* RBSOdometer-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "RBSOdometer-prefix.pch"; sourceTree = ""; }; 70A35CAE653E46148A049D2031E9826E /* RBSOdometer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = RBSOdometer.modulemap; sourceTree = ""; }; 748540DF13DF696555F429D17105FBF8 /* Pods-RBSOdometer_Tests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RBSOdometer_Tests-frameworks.sh"; sourceTree = ""; }; + 74E45152FF621C80A24C9D7CC11206A9 /* RBSOdometer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RBSOdometer.framework; path = RBSOdometer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7CDED3659C5FC6B8E0DFB48807432732 /* Pods-RBSOdometer_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-RBSOdometer_Tests.modulemap"; sourceTree = ""; }; + 923A328B73264EB3306F39C08E2ADD08 /* RBSReuseQueue-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RBSReuseQueue-dummy.m"; sourceTree = ""; }; 92F2D1E40C3314F5C5627E58862C02B5 /* Pods-RBSOdometer_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RBSOdometer_Example-umbrella.h"; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 98E3C3F3A2ADA74705A4A50B4CAF7DB3 /* Pods-RBSOdometer_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RBSOdometer_Tests-dummy.m"; sourceTree = ""; }; A89DE46B6E37C956A8C88B590113C598 /* Pods-RBSOdometer_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RBSOdometer_Tests-acknowledgements.markdown"; sourceTree = ""; }; + AA0929EADA025728A703149C25EEB18A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AF058E445EE72BD178B51AB52B202286 /* RBSReusableDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = RBSReusableDelegate.h; path = RBSReuseQueue/Classes/RBSReusableDelegate.h; sourceTree = ""; }; B30441E8D5A9593EC4CEEA8EBB77A1AD /* RBSOdometer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "RBSOdometer-dummy.m"; sourceTree = ""; }; B5E5F29B7D76D7CD78BFB4277253F3CE /* RBSOdometerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RBSOdometerView.m; path = RBSOdometer/Classes/RBSOdometerView.m; sourceTree = ""; }; - BE4E3B3F9F35F05DE0A1F62449483817 /* RBSOdometer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RBSOdometer.framework; path = RBSOdometer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B790BDC1B9037103FF0EE097AC3DEF2C /* RBSReuseQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = RBSReuseQueue.m; path = RBSReuseQueue/Classes/RBSReuseQueue.m; sourceTree = ""; }; C0800C48934B8184A58C4E87BCAF4B56 /* Pods-RBSOdometer_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RBSOdometer_Example.release.xcconfig"; sourceTree = ""; }; C741F5359DE17A0CDCD7DB9A9FF97CD4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; C86BE71D2EA7AD49E1117873828251FC /* Pods-RBSOdometer_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RBSOdometer_Tests-umbrella.h"; sourceTree = ""; }; C87E3BF6AA4B7C2C67B88AC881598CCB /* RBSOdometer.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = RBSOdometer.xcconfig; sourceTree = ""; }; + CDA40B7DBCA59E75B606C6FAAA393395 /* Pods_RBSOdometer_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RBSOdometer_Example.framework; path = "Pods-RBSOdometer_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; D61B47CA3543BA198C601777A359F6E5 /* Pods-RBSOdometer_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RBSOdometer_Tests.release.xcconfig"; sourceTree = ""; }; - D7C85344F82DF69CD988B5290227604E /* Pods_RBSOdometer_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RBSOdometer_Tests.framework; path = "Pods-RBSOdometer_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; D9E9B81E03BF336903A9790652B33032 /* Pods-RBSOdometer_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RBSOdometer_Example-frameworks.sh"; sourceTree = ""; }; DB0F596CFA5CF9A22B3DBB50E4E305ED /* Pods-RBSOdometer_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RBSOdometer_Tests-resources.sh"; sourceTree = ""; }; + DCC86AE2DE020BCAC75CDB29C68C4ABE /* RBSReuseQueue.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = RBSReuseQueue.framework; path = RBSReuseQueue.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DF8F660A4B9DDC0219D7C36E68441D44 /* Pods_RBSOdometer_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RBSOdometer_Tests.framework; path = "Pods-RBSOdometer_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; F1FFB6ACFCC66CD94B88D7AD761E521B /* Pods-RBSOdometer_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-RBSOdometer_Example.modulemap"; sourceTree = ""; }; + F6DB4212249AA7354010AB3A613C24D9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; FCA64ACFFE063073E12A3762C658AA92 /* Pods-RBSOdometer_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RBSOdometer_Example-acknowledgements.markdown"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 15D98A6A45A5939D2436CA7A14BC6A48 /* Frameworks */ = { + 0617383D9F21C52EA6C4A86F80731A39 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A9AC6308DA23D546E7CB33EE4BC96D38 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 96084FA2A8A673B45BD01162BBA46A51 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 22A249D395372829CE7DE8903071B704 /* Foundation.framework in Frameworks */, + 01FC7A35BF4D3B4818BAC1B6A92F1A71 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 53E3874BFD8BD6120D426BA32DAA12B9 /* Frameworks */ = { + CE9416E311C9F2A2DE02C0519D664CB4 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 9A636DE6F196AE501984BAE3D50B53E1 /* Foundation.framework in Frameworks */, + 86EB3D82A3672A947ACCAAD69245367B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 96084FA2A8A673B45BD01162BBA46A51 /* Frameworks */ = { + F60E94835721AFA63B1D2DCE296849A7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 01FC7A35BF4D3B4818BAC1B6A92F1A71 /* Foundation.framework in Frameworks */, + DB05964A2402E48E2B26E0B3BF565095 /* Foundation.framework in Frameworks */, + 3C84EAB91AA195D34A4248A1383BD73B /* RBSReuseQueue.framework in Frameworks */, + 38EF3FB6327DFB25C887C7563E3C64B2 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2740FD6F8CDEBEB5CE4A677B5024318E /* Products */ = { + 0BF55DFCF5BD91C90514B8AF1672AD4E /* iOS */ = { + isa = PBXGroup; + children = ( + F6DB4212249AA7354010AB3A613C24D9 /* Foundation.framework */, + 0217D99058421146CCE3B0C2AFE2988E /* UIKit.framework */, + ); + name = iOS; + sourceTree = ""; + }; + 5256A123E729D2861EA1FE3B7DF64C18 /* Products */ = { isa = PBXGroup; children = ( - 0DBAD2732EA39A1E387906EF444B5214 /* Pods_RBSOdometer_Example.framework */, - D7C85344F82DF69CD988B5290227604E /* Pods_RBSOdometer_Tests.framework */, - BE4E3B3F9F35F05DE0A1F62449483817 /* RBSOdometer.framework */, + CDA40B7DBCA59E75B606C6FAAA393395 /* Pods_RBSOdometer_Example.framework */, + DF8F660A4B9DDC0219D7C36E68441D44 /* Pods_RBSOdometer_Tests.framework */, + 74E45152FF621C80A24C9D7CC11206A9 /* RBSOdometer.framework */, + DCC86AE2DE020BCAC75CDB29C68C4ABE /* RBSReuseQueue.framework */, ); name = Products; sourceTree = ""; }; + 5EDC9B3CC3BC70858372BC4FC80AD35A /* RBSReuseQueue */ = { + isa = PBXGroup; + children = ( + AF058E445EE72BD178B51AB52B202286 /* RBSReusableDelegate.h */, + 51BF960A91804E6BD9664A4223955719 /* RBSReuseQueue.h */, + B790BDC1B9037103FF0EE097AC3DEF2C /* RBSReuseQueue.m */, + F1C8B64397DF972EE818B56E259338E1 /* Support Files */, + ); + name = RBSReuseQueue; + path = RBSReuseQueue; + sourceTree = ""; + }; 6795A3C65EF1F929EE776E8907398502 /* Pods-RBSOdometer_Tests */ = { isa = PBXGroup; children = ( @@ -127,8 +193,9 @@ children = ( 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, E495128A9D175904759FBB433E0A6843 /* Development Pods */, - BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, - 2740FD6F8CDEBEB5CE4A677B5024318E /* Products */, + ABFF0395AFF6D2EE41092AA2A4923FEE /* Frameworks */, + C23637D3C7ECA059A99237C33A277904 /* Pods */, + 5256A123E729D2861EA1FE3B7DF64C18 /* Products */, DCF429495FC1F8F815DC8D91D921EDCD /* Targets Support Files */, ); sourceTree = ""; @@ -165,20 +232,21 @@ path = "Example/Pods/Target Support Files/RBSOdometer"; sourceTree = ""; }; - BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { + ABFF0395AFF6D2EE41092AA2A4923FEE /* Frameworks */ = { isa = PBXGroup; children = ( - D35AF013A5F0BAD4F32504907A52519E /* iOS */, + 041B23C97132DA96B8701B8CFA007DFB /* RBSReuseQueue.framework */, + 0BF55DFCF5BD91C90514B8AF1672AD4E /* iOS */, ); name = Frameworks; sourceTree = ""; }; - D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { + C23637D3C7ECA059A99237C33A277904 /* Pods */ = { isa = PBXGroup; children = ( - 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, + 5EDC9B3CC3BC70858372BC4FC80AD35A /* RBSReuseQueue */, ); - name = iOS; + name = Pods; sourceTree = ""; }; DCF429495FC1F8F815DC8D91D921EDCD /* Targets Support Files */ = { @@ -209,23 +277,47 @@ path = ../..; sourceTree = ""; }; + F1C8B64397DF972EE818B56E259338E1 /* Support Files */ = { + isa = PBXGroup; + children = ( + AA0929EADA025728A703149C25EEB18A /* Info.plist */, + 4C0E8E619337BCFEA5D48AA215BA11BF /* RBSReuseQueue.modulemap */, + 0E6BEB5ED59573C2A943B00405C4A6CE /* RBSReuseQueue.xcconfig */, + 923A328B73264EB3306F39C08E2ADD08 /* RBSReuseQueue-dummy.m */, + 028B9E2FC2D5CECBAE0172218810D70D /* RBSReuseQueue-prefix.pch */, + 482011CA9345179205C537C581C03C34 /* RBSReuseQueue-umbrella.h */, + ); + name = "Support Files"; + path = "../Target Support Files/RBSReuseQueue"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ - 180E0130DD6766F264D62966C0EF2DED /* Headers */ = { + 181C908F8F8CD2CC1E4C2A548C284AE7 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - E5188A4D8826D96CA7776C98CB502C2F /* RBSOdometer-umbrella.h in Headers */, - 7BC221682E51C1C312D3BC49C0C1583D /* RBSOdometerView.h in Headers */, + 63735284B7F0BD1E889B80EAF7822DBA /* RBSOdometer-umbrella.h in Headers */, + D49149793F80B4E7E0C2EC7D35AE930E /* RBSOdometerView.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 97D7B06455E806A18EB9416296A8D82E /* Headers */ = { + 59E24A08AF919450B6ED49303BC8855D /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 0FF119A37BD9D74DC2E6ACFB45AD8460 /* Pods-RBSOdometer_Example-umbrella.h in Headers */, + 3A5D2CCAC02F13A28DAFEEA30EF665B0 /* Pods-RBSOdometer_Example-umbrella.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8BB0D4D2BB1809B5B38ABB8E07E48DCC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B53A8C99968CAE48A5B76F0D9695FC1D /* RBSReusableDelegate.h in Headers */, + C1E3ECDC91190D75B3BEDE85AD82C776 /* RBSReuseQueue-umbrella.h in Headers */, + 93BA1306E5B3BEF8C69F609E6B44584F /* RBSReuseQueue.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -240,6 +332,24 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ + 250DC430D833BAA34DE8A9F26767EF84 /* RBSOdometer */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0864B7AEA0F771BFDD802C4A5D01D0E1 /* Build configuration list for PBXNativeTarget "RBSOdometer" */; + buildPhases = ( + 6D25C12CDF86579698DE1EE44B7FE495 /* Sources */, + F60E94835721AFA63B1D2DCE296849A7 /* Frameworks */, + 181C908F8F8CD2CC1E4C2A548C284AE7 /* Headers */, + ); + buildRules = ( + ); + dependencies = ( + F2C4F04362A554AE85985E76EB74A42E /* PBXTargetDependency */, + ); + name = RBSOdometer; + productName = RBSOdometer; + productReference = 74E45152FF621C80A24C9D7CC11206A9 /* RBSOdometer.framework */; + productType = "com.apple.product-type.framework"; + }; 35F2A0A5836A4BE6F2C4E7FF4CBE6BC2 /* Pods-RBSOdometer_Tests */ = { isa = PBXNativeTarget; buildConfigurationList = 3E7D2C8AA1EA6E6EE8B49B1027ADD0BB /* Build configuration list for PBXNativeTarget "Pods-RBSOdometer_Tests" */; @@ -254,42 +364,43 @@ ); name = "Pods-RBSOdometer_Tests"; productName = "Pods-RBSOdometer_Tests"; - productReference = D7C85344F82DF69CD988B5290227604E /* Pods_RBSOdometer_Tests.framework */; + productReference = DF8F660A4B9DDC0219D7C36E68441D44 /* Pods_RBSOdometer_Tests.framework */; productType = "com.apple.product-type.framework"; }; - 7AE2B0798DD21FA35ACE87D09AE9A299 /* Pods-RBSOdometer_Example */ = { + 92E54163F43F27474020C61C710872FC /* Pods-RBSOdometer_Example */ = { isa = PBXNativeTarget; - buildConfigurationList = E0E24461D21FA6B8BB8876A452F3AB1E /* Build configuration list for PBXNativeTarget "Pods-RBSOdometer_Example" */; + buildConfigurationList = 5F3034ADFB7A7F5080DC6652E82EC550 /* Build configuration list for PBXNativeTarget "Pods-RBSOdometer_Example" */; buildPhases = ( - 8AD41CC62ED0C986D4BD549259B0705D /* Sources */, - 15D98A6A45A5939D2436CA7A14BC6A48 /* Frameworks */, - 97D7B06455E806A18EB9416296A8D82E /* Headers */, + F1C2BD1090846606B3452A144FA72FBD /* Sources */, + 0617383D9F21C52EA6C4A86F80731A39 /* Frameworks */, + 59E24A08AF919450B6ED49303BC8855D /* Headers */, ); buildRules = ( ); dependencies = ( - 7D2735D2CAD71A0433BB841967441F14 /* PBXTargetDependency */, + CEFB92A40E25C58098FD19C3E0A26A01 /* PBXTargetDependency */, + 8CB52BE8AE794B56CB9F56855CDF9575 /* PBXTargetDependency */, ); name = "Pods-RBSOdometer_Example"; productName = "Pods-RBSOdometer_Example"; - productReference = 0DBAD2732EA39A1E387906EF444B5214 /* Pods_RBSOdometer_Example.framework */; + productReference = CDA40B7DBCA59E75B606C6FAAA393395 /* Pods_RBSOdometer_Example.framework */; productType = "com.apple.product-type.framework"; }; - D60E6AD6040D9D31F2E6A8B7D9B0AF7B /* RBSOdometer */ = { + A46A9C671B39A14436BC2F007E33AB9F /* RBSReuseQueue */ = { isa = PBXNativeTarget; - buildConfigurationList = 0C999A827C41CCABB82A1DF9FDA15B2F /* Build configuration list for PBXNativeTarget "RBSOdometer" */; + buildConfigurationList = 08308E749FDB6F706BF6D756022B5E82 /* Build configuration list for PBXNativeTarget "RBSReuseQueue" */; buildPhases = ( - 5A2DB10F89F8C8715A3BE7DBCF43C387 /* Sources */, - 53E3874BFD8BD6120D426BA32DAA12B9 /* Frameworks */, - 180E0130DD6766F264D62966C0EF2DED /* Headers */, + FCDAA8B234F4614366C129BD48BE863B /* Sources */, + CE9416E311C9F2A2DE02C0519D664CB4 /* Frameworks */, + 8BB0D4D2BB1809B5B38ABB8E07E48DCC /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = RBSOdometer; - productName = RBSOdometer; - productReference = BE4E3B3F9F35F05DE0A1F62449483817 /* RBSOdometer.framework */; + name = RBSReuseQueue; + productName = RBSReuseQueue; + productReference = DCC86AE2DE020BCAC75CDB29C68C4ABE /* RBSReuseQueue.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -309,58 +420,80 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 2740FD6F8CDEBEB5CE4A677B5024318E /* Products */; + productRefGroup = 5256A123E729D2861EA1FE3B7DF64C18 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 7AE2B0798DD21FA35ACE87D09AE9A299 /* Pods-RBSOdometer_Example */, + 92E54163F43F27474020C61C710872FC /* Pods-RBSOdometer_Example */, 35F2A0A5836A4BE6F2C4E7FF4CBE6BC2 /* Pods-RBSOdometer_Tests */, - D60E6AD6040D9D31F2E6A8B7D9B0AF7B /* RBSOdometer */, + 250DC430D833BAA34DE8A9F26767EF84 /* RBSOdometer */, + A46A9C671B39A14436BC2F007E33AB9F /* RBSReuseQueue */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 5A2DB10F89F8C8715A3BE7DBCF43C387 /* Sources */ = { + 6D25C12CDF86579698DE1EE44B7FE495 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - BA55B47D5BE5D99F4EC116814318B320 /* RBSOdometer-dummy.m in Sources */, - ADAB26D00A8B34CA7B2D90860D5F462E /* RBSOdometerView.m in Sources */, + 328F146262A0C9264E536629FD475193 /* RBSOdometer-dummy.m in Sources */, + A98144519CF275E93C1585FB05CED137 /* RBSOdometerView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 8AD41CC62ED0C986D4BD549259B0705D /* Sources */ = { + 98D92DC27513788FCE48AC952743B1E4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E30561B63063ECA76D6301237B0AC0A0 /* Pods-RBSOdometer_Example-dummy.m in Sources */, + 969916E95110FD6C3978801AFE5B56A8 /* Pods-RBSOdometer_Tests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 98D92DC27513788FCE48AC952743B1E4 /* Sources */ = { + F1C2BD1090846606B3452A144FA72FBD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 969916E95110FD6C3978801AFE5B56A8 /* Pods-RBSOdometer_Tests-dummy.m in Sources */, + 12C6537256B973F2F69A04D39B7CBDA7 /* Pods-RBSOdometer_Example-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FCDAA8B234F4614366C129BD48BE863B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 698458E192829B3AEA191E7FF841ABBE /* RBSReuseQueue-dummy.m in Sources */, + 28D5B6D1539718F340E978724C4F1686 /* RBSReuseQueue.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 7D2735D2CAD71A0433BB841967441F14 /* PBXTargetDependency */ = { + 8CB52BE8AE794B56CB9F56855CDF9575 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RBSReuseQueue; + target = A46A9C671B39A14436BC2F007E33AB9F /* RBSReuseQueue */; + targetProxy = FF5CB14C4A31D988D2E4C66F058FF6BB /* PBXContainerItemProxy */; + }; + CEFB92A40E25C58098FD19C3E0A26A01 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = RBSOdometer; - target = D60E6AD6040D9D31F2E6A8B7D9B0AF7B /* RBSOdometer */; - targetProxy = 0A406E286CCFA373B22A6CFE4433220A /* PBXContainerItemProxy */; + target = 250DC430D833BAA34DE8A9F26767EF84 /* RBSOdometer */; + targetProxy = B9ECD1F714B59AAF20C1E5F26577C8F9 /* PBXContainerItemProxy */; + }; + F2C4F04362A554AE85985E76EB74A42E /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = RBSReuseQueue; + target = A46A9C671B39A14436BC2F007E33AB9F /* RBSReuseQueue */; + targetProxy = 66ECBA775255015CF125245508D47A27 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ - 0389C7F5C4A2415AF914C388CD8500FF /* Release */ = { + 0987A1F6E4D5E5E33697D6D502663D47 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C87E3BF6AA4B7C2C67B88AC881598CCB /* RBSOdometer.xcconfig */; + baseConfigurationReference = 0E6BEB5ED59573C2A943B00405C4A6CE /* RBSReuseQueue.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -371,22 +504,21 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/RBSOdometer/RBSOdometer-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/RBSOdometer/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RBSReuseQueue/RBSReuseQueue-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RBSReuseQueue/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/RBSOdometer/RBSOdometer.modulemap"; - PRODUCT_NAME = RBSOdometer; + MODULEMAP_FILE = "Target Support Files/RBSReuseQueue/RBSReuseQueue.modulemap"; + PRODUCT_NAME = RBSReuseQueue; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; 33DA7F43A1D2FA3C74A8C8FC246E1FA6 /* Debug */ = { isa = XCBuildConfiguration; @@ -448,7 +580,39 @@ }; name = Debug; }; - 39820D0493B7CAAD13652EC02DFF1CC6 /* Release */ = { + 4BDEF716A2352900B00A1C02B8C33E74 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1738EC4C20F78A6111E29670BC86FA80 /* Pods-RBSOdometer_Example.debug.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-RBSOdometer_Example/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = Pods_RBSOdometer_Example; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 5A12DF1325F92A139FF30C8D25948957 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = C0800C48934B8184A58C4E87BCAF4B56 /* Pods-RBSOdometer_Example.release.xcconfig */; buildSettings = { @@ -536,9 +700,9 @@ }; name = Release; }; - 835DCE6B1C9CBD95FEC360D9B8AA1F9F /* Debug */ = { + 753F1A5189421C170819502F6F65151C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1738EC4C20F78A6111E29670BC86FA80 /* Pods-RBSOdometer_Example.debug.xcconfig */; + baseConfigurationReference = C87E3BF6AA4B7C2C67B88AC881598CCB /* RBSOdometer.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -549,19 +713,16 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-RBSOdometer_Example/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/RBSOdometer/RBSOdometer-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RBSOdometer/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.3; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_RBSOdometer_Example; + MODULEMAP_FILE = "Target Support Files/RBSOdometer/RBSOdometer.modulemap"; + PRODUCT_NAME = RBSOdometer; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; @@ -601,6 +762,36 @@ }; name = Release; }; + AAA86CD5E7594786C569090D7564A6CE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 0E6BEB5ED59573C2A943B00405C4A6CE /* RBSReuseQueue.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/RBSReuseQueue/RBSReuseQueue-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/RBSReuseQueue/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/RBSReuseQueue/RBSReuseQueue.modulemap"; + PRODUCT_NAME = RBSReuseQueue; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; D82E7E3C2BDC97F9AF726124AEEA3943 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 1EBFB70583C394509B51E3AE02D25B1F /* Pods-RBSOdometer_Tests.debug.xcconfig */; @@ -633,7 +824,7 @@ }; name = Debug; }; - EE8379F47964CF914197E20F9DD09311 /* Debug */ = { + E2254D5E7268DD833834F780DE2C8605 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = C87E3BF6AA4B7C2C67B88AC881598CCB /* RBSOdometer.xcconfig */; buildSettings = { @@ -657,19 +848,29 @@ SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 0C999A827C41CCABB82A1DF9FDA15B2F /* Build configuration list for PBXNativeTarget "RBSOdometer" */ = { + 08308E749FDB6F706BF6D756022B5E82 /* Build configuration list for PBXNativeTarget "RBSReuseQueue" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0987A1F6E4D5E5E33697D6D502663D47 /* Debug */, + AAA86CD5E7594786C569090D7564A6CE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0864B7AEA0F771BFDD802C4A5D01D0E1 /* Build configuration list for PBXNativeTarget "RBSOdometer" */ = { isa = XCConfigurationList; buildConfigurations = ( - EE8379F47964CF914197E20F9DD09311 /* Debug */, - 0389C7F5C4A2415AF914C388CD8500FF /* Release */, + 753F1A5189421C170819502F6F65151C /* Debug */, + E2254D5E7268DD833834F780DE2C8605 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -692,11 +893,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E0E24461D21FA6B8BB8876A452F3AB1E /* Build configuration list for PBXNativeTarget "Pods-RBSOdometer_Example" */ = { + 5F3034ADFB7A7F5080DC6652E82EC550 /* Build configuration list for PBXNativeTarget "Pods-RBSOdometer_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - 835DCE6B1C9CBD95FEC360D9B8AA1F9F /* Debug */, - 39820D0493B7CAAD13652EC02DFF1CC6 /* Release */, + 4BDEF716A2352900B00A1C02B8C33E74 /* Debug */, + 5A12DF1325F92A139FF30C8D25948957 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/Pods-RBSOdometer_Example.xcscheme b/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/Pods-RBSOdometer_Example.xcscheme index 0fed151..6cdf0d4 100644 --- a/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/Pods-RBSOdometer_Example.xcscheme +++ b/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/Pods-RBSOdometer_Example.xcscheme @@ -14,7 +14,7 @@ buildForAnalyzing = "YES"> @@ -47,7 +47,7 @@ diff --git a/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/RBSOdometer.xcscheme b/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/RBSOdometer.xcscheme index 9f59098..5268850 100644 --- a/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/RBSOdometer.xcscheme +++ b/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/RBSOdometer.xcscheme @@ -14,7 +14,7 @@ buildForArchiving = "YES"> diff --git a/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/xcschememanagement.plist b/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/xcschememanagement.plist index 3645f8b..f55a20c 100644 --- a/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/Example/Pods/Pods.xcodeproj/xcuserdata/rbbtsn0w.xcuserdatad/xcschemes/xcschememanagement.plist @@ -19,6 +19,11 @@ isShown + RBSReuseQueue.xcscheme + + isShown + + SuppressBuildableAutocreation diff --git a/Example/Pods/RBSReuseQueue/LICENSE b/Example/Pods/RBSReuseQueue/LICENSE new file mode 100644 index 0000000..ca68af8 --- /dev/null +++ b/Example/Pods/RBSReuseQueue/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018 rbbtsn0w + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReusableDelegate.h b/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReusableDelegate.h new file mode 100644 index 0000000..10301c4 --- /dev/null +++ b/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReusableDelegate.h @@ -0,0 +1,45 @@ +// +// RBSReusableDelegate.h +// +// Copyright (c) 2017 RbBtSn0w +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +NS_ASSUME_NONNULL_BEGIN +@protocol RBSReusableDelegate + +@property (nonatomic, copy) NSString *reuseIdentifier; + +@optional + +/** + 建议实现这个协议,如果没有实现这个协议,在ReuseQueue 中 registerClass 这样的函数的注册就没有意义,且 + 函数 dequeueReusableObjectWithIdentifier 可能返回 nil。 + + @param reuseIdentifier reuseIdentifier description + @return 实例化函数 + */ +- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier; + +- (void) prepareForReuse; + +@end +NS_ASSUME_NONNULL_END diff --git a/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReuseQueue.h b/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReuseQueue.h new file mode 100644 index 0000000..960eb8a --- /dev/null +++ b/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReuseQueue.h @@ -0,0 +1,62 @@ +// +// RBSReuseQueue.h +// +// Copyright (c) 2017 RbBtSn0w +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import + +NS_ASSUME_NONNULL_BEGIN +@protocol RBSReusableDelegate; + +@interface RBSReuseQueue : NSObject + + +/** + 将 reusableObject 从重用队列中移除 + + @param reusableObject reusableObject 必须是实现了QNBReusableDelegate 协议 + */ +- (void) enqueueReusableObject:(id)reusableObject; + + +/** + 依靠identifier,从重用队列中去找寻,如果为找到,就会依赖QNBReusableDelegate 协议,来创建对应的object 并放回。 + + @warning 需要注意,如果未实现协议 QNBReusableDelegate 中的 initWithReuseIdentifier, 重用队列的cache 不存在的时候,返回值为 nil + + @param identifier identifier description + @return 放回可重用的object + */ +- (nullable id) dequeueReusableObjectWithIdentifier:(NSString *)identifier; + + +/** + 类似Cell通过自行注册的方式 + + @warning 需要注意,如果未实现协议 QNBReusableDelegate 中的 initWithReuseIdentifier, 此函数无任何作用 + + @param aClass 需要注册的Class 可为nil,如果为nil,则会根据对应的id从cache 中移除。 class 必须实现 QNBReusableDelegate 协议 + @param identifier identifier description + */ +- (void) registerClass:(nullable Class)aClass withReuseIdentifier:(NSString *)identifier; + +@end +NS_ASSUME_NONNULL_END diff --git a/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReuseQueue.m b/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReuseQueue.m new file mode 100644 index 0000000..62871ec --- /dev/null +++ b/Example/Pods/RBSReuseQueue/RBSReuseQueue/Classes/RBSReuseQueue.m @@ -0,0 +1,178 @@ +// +// RBSReuseQueue.m +// +// Copyright (c) 2017 RbBtSn0w +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#import "RBSReuseQueue.h" +#import "RBSReusableDelegate.h" + +NS_ASSUME_NONNULL_BEGIN + +static NSString *const kUndeineProtolReason = @"未实现 RBSReusableDelegate 协议"; +static NSString *const kUndeineProtolInitReason = @"未实现 RBSReusableDelegate 协议中的 initWithReuseIdentifier: "; + +static inline NSException * UndeineProtolException(NSString *format, ...){ + NSString *reason = nil; + va_list args; + va_start(args, format); + reason = [[NSString alloc] initWithFormat:format arguments:args]; + va_end(args); + + return [NSException exceptionWithName:NSObjectNotAvailableException reason:reason userInfo:nil]; +} + +@interface RBSReuseQueue () + +@property (nonatomic, strong) NSCache>*> *recycleBin; +@property (nonatomic, strong) NSMutableDictionary>*> *workStation; +@property (nonatomic, strong) NSMutableDictionary *registerClasses; +@end + + +@implementation RBSReuseQueue + + +#pragma mark    -   Accessors +- (void)cache:(NSCache *)cache willEvictObject:(id)obj { + NSLog(@"NSCache willEvictObject %p",obj); +} + +- (NSCache>*> *) recycleBin{ + if (!_recycleBin) { + _recycleBin = [[NSCache alloc] init]; + _recycleBin.delegate = self; + } + return _recycleBin; +} + +- (NSMutableDictionary>*> *) workStation{ + if (!_workStation) { + _workStation = [NSMutableDictionary dictionary]; + } + return _workStation; +} + +- (NSMutableDictionary *)registerClasses{ + if (!_registerClasses) { + _registerClasses = [NSMutableDictionary dictionary]; + } + return _registerClasses; +} + +#pragma mark    -   Super +- (instancetype) init { + self = [super init]; + if (self) { + + } + return self; +} + +#pragma mark Object lifecycle + + + +#pragma mark    -   Private +- (NSMutableSet> *) mutableSetValueInRecycleBinForIdentifier:(NSString *)identifier{ + NSMutableSet> *recycledSet = [self.recycleBin objectForKey:identifier]; + if (!recycledSet) { + recycledSet = [[NSMutableSet alloc] init]; + [self.recycleBin setObject:recycledSet forKey:identifier cost:1]; + } + return recycledSet; +} + +- (NSMutableSet> *) mutableSetValueInWorkStationForIdentifier:(NSString *)identifier{ + NSMutableSet> *visibleSet = self.workStation[identifier]; + if (!visibleSet) { + visibleSet = [[NSMutableSet alloc] init]; + self.workStation[identifier] = visibleSet; + } + return visibleSet; +} + +- (nullable id) protocolDoInitWithReuseIdentifier:(NSString *)identifier { + Class aClass = self.registerClasses[identifier]; + if (aClass) { + NSAssert([aClass conformsToProtocol:@protocol(RBSReusableDelegate)], kUndeineProtolReason); + id protolObject = [aClass alloc]; + NSAssert([protolObject respondsToSelector:@selector(initWithReuseIdentifier:)], kUndeineProtolInitReason); + protolObject = [protolObject initWithReuseIdentifier:identifier]; + return protolObject; + }else { + return nil; + } +} + + +#pragma mark    -   Interface + +- (void) enqueueReusableObject:(id)reusableObject{ + if ([reusableObject respondsToSelector:@selector(reuseIdentifier)] && [reusableObject respondsToSelector:@selector(setReuseIdentifier:)] ) { + + NSMutableSet> *workStation = [self mutableSetValueInWorkStationForIdentifier:reusableObject.reuseIdentifier]; + NSMutableSet> *recycle = [self mutableSetValueInRecycleBinForIdentifier:reusableObject.reuseIdentifier]; + [recycle addObject:reusableObject]; + [workStation removeObject:reusableObject]; + + NSLog(@"workStationCount: %tu, recyclecount %tu",workStation.count, recycle.count); + } else { + @throw UndeineProtolException(kUndeineProtolReason); + } +} + +- (nullable id) dequeueReusableObjectWithIdentifier:(NSString *)identifier{ + + id reusableObject = [[self mutableSetValueInRecycleBinForIdentifier:identifier] anyObject]; + if (!reusableObject) { + reusableObject = [self protocolDoInitWithReuseIdentifier:identifier]; + if (!reusableObject) { + return reusableObject; + } + } + + NSMutableSet> *workStation = [self mutableSetValueInWorkStationForIdentifier:identifier]; + NSMutableSet> *recycle = [self mutableSetValueInRecycleBinForIdentifier:identifier]; + [workStation addObject:reusableObject]; + [recycle removeObject:reusableObject]; + + if ([reusableObject respondsToSelector:@selector(prepareForReuse)]) { + [reusableObject prepareForReuse]; + } + + return reusableObject; +} + +- (void) registerClass:(nullable Class)aClass withReuseIdentifier:(NSString *)identifier{ + if (aClass) { + NSAssert([aClass conformsToProtocol:@protocol(RBSReusableDelegate)], kUndeineProtolReason); + id protolObject = [aClass alloc]; + NSAssert([protolObject respondsToSelector:@selector(initWithReuseIdentifier:)], kUndeineProtolInitReason); + [self.registerClasses setObject:aClass forKey:identifier]; + } else { + [self.registerClasses removeObjectForKey:identifier]; + } +} + + +@end +NS_ASSUME_NONNULL_END + diff --git a/Example/Pods/RBSReuseQueue/README.md b/Example/Pods/RBSReuseQueue/README.md new file mode 100644 index 0000000..6c596bd --- /dev/null +++ b/Example/Pods/RBSReuseQueue/README.md @@ -0,0 +1,31 @@ +# RBSReuseQueue + +[![CI Status](http://img.shields.io/travis/rbbtsn0w/RBSReuseQueue.svg?style=flat)](https://travis-ci.org/rbbtsn0w/RBSReuseQueue) +[![Version](https://img.shields.io/cocoapods/v/RBSReuseQueue.svg?style=flat)](http://cocoapods.org/pods/RBSReuseQueue) +[![License](https://img.shields.io/cocoapods/l/RBSReuseQueue.svg?style=flat)](http://cocoapods.org/pods/RBSReuseQueue) +[![Platform](https://img.shields.io/cocoapods/p/RBSReuseQueue.svg?style=flat)](http://cocoapods.org/pods/RBSReuseQueue) + +RBSReuseQueue is a ObjC library for Simple set your reuse object in queue.. + +## Example + +To run the example project, clone the repo, and run `pod install` from the Example directory first. + +## Requirements + +## Installation + +RBSReuseQueue is available through [CocoaPods](http://cocoapods.org). To install +it, simply add the following line to your Podfile: + +```ruby +pod 'RBSReuseQueue' +``` + +## Author + +rbbtsn0w, hamiltonsnow@gmail.com + +## License + +RBSReuseQueue is available under the MIT license. See the LICENSE file for more info. diff --git a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-acknowledgements.markdown index a0e9593..7f5780c 100644 --- a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-acknowledgements.markdown +++ b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-acknowledgements.markdown @@ -23,4 +23,27 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +## RBSReuseQueue + +Copyright (c) 2018 rbbtsn0w + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-acknowledgements.plist index 4a47352..d760380 100644 --- a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-acknowledgements.plist @@ -41,6 +41,35 @@ THE SOFTWARE. Type PSGroupSpecifier + + FooterText + Copyright (c) 2018 rbbtsn0w <hamiltonsnow@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + License + MIT + Title + RBSReuseQueue + Type + PSGroupSpecifier + FooterText Generated by CocoaPods - https://cocoapods.org diff --git a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-frameworks.sh b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-frameworks.sh index 0143d0b..11f959e 100755 --- a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-frameworks.sh +++ b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-frameworks.sh @@ -103,9 +103,11 @@ strip_invalid_archs() { if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/RBSOdometer/RBSOdometer.framework" + install_framework "${BUILT_PRODUCTS_DIR}/RBSReuseQueue/RBSReuseQueue.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/RBSOdometer/RBSOdometer.framework" + install_framework "${BUILT_PRODUCTS_DIR}/RBSReuseQueue/RBSReuseQueue.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.debug.xcconfig index 64d700b..e56b1e7 100644 --- a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.debug.xcconfig @@ -1,8 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer" "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer/RBSOdometer.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "RBSOdometer" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer/RBSOdometer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue/RBSReuseQueue.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "RBSOdometer" -framework "RBSReuseQueue" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.release.xcconfig index 64d700b..e56b1e7 100644 --- a/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example.release.xcconfig @@ -1,8 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer" "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer/RBSOdometer.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "RBSOdometer" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer/RBSOdometer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue/RBSReuseQueue.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "RBSOdometer" -framework "RBSReuseQueue" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/Pods/Target Support Files/Pods-RBSOdometer_Tests/Pods-RBSOdometer_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-RBSOdometer_Tests/Pods-RBSOdometer_Tests.debug.xcconfig index 65a2ac5..628fa08 100644 --- a/Example/Pods/Target Support Files/Pods-RBSOdometer_Tests/Pods-RBSOdometer_Tests.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-RBSOdometer_Tests/Pods-RBSOdometer_Tests.debug.xcconfig @@ -1,7 +1,7 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer" "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer/RBSOdometer.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer/RBSOdometer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue/RBSReuseQueue.framework/Headers" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/Pods/Target Support Files/Pods-RBSOdometer_Tests/Pods-RBSOdometer_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-RBSOdometer_Tests/Pods-RBSOdometer_Tests.release.xcconfig index 65a2ac5..628fa08 100644 --- a/Example/Pods/Target Support Files/Pods-RBSOdometer_Tests/Pods-RBSOdometer_Tests.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-RBSOdometer_Tests/Pods-RBSOdometer_Tests.release.xcconfig @@ -1,7 +1,7 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer" +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer" "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer/RBSOdometer.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSOdometer/RBSOdometer.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue/RBSReuseQueue.framework/Headers" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/Pods/Target Support Files/RBSOdometer/Info.plist b/Example/Pods/Target Support Files/RBSOdometer/Info.plist index 161a9d3..97eeeda 100644 --- a/Example/Pods/Target Support Files/RBSOdometer/Info.plist +++ b/Example/Pods/Target Support Files/RBSOdometer/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.1.0 + 0.1.1 CFBundleSignature ???? CFBundleVersion diff --git a/Example/Pods/Target Support Files/RBSOdometer/RBSOdometer.xcconfig b/Example/Pods/Target Support Files/RBSOdometer/RBSOdometer.xcconfig index ca51174..d1d78bd 100644 --- a/Example/Pods/Target Support Files/RBSOdometer/RBSOdometer.xcconfig +++ b/Example/Pods/Target Support Files/RBSOdometer/RBSOdometer.xcconfig @@ -1,6 +1,8 @@ CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/RBSOdometer +FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +OTHER_LDFLAGS = -framework "UIKit" PODS_BUILD_DIR = $BUILD_DIR PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/Pods/Target Support Files/RBSReuseQueue/Info.plist b/Example/Pods/Target Support Files/RBSReuseQueue/Info.plist new file mode 100644 index 0000000..161a9d3 --- /dev/null +++ b/Example/Pods/Target Support Files/RBSReuseQueue/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 0.1.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-dummy.m b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-dummy.m new file mode 100644 index 0000000..54e05d0 --- /dev/null +++ b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_RBSReuseQueue : NSObject +@end +@implementation PodsDummy_RBSReuseQueue +@end diff --git a/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-prefix.pch b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-umbrella.h b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-umbrella.h new file mode 100644 index 0000000..d1ea05f --- /dev/null +++ b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue-umbrella.h @@ -0,0 +1,18 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + +#import "RBSReusableDelegate.h" +#import "RBSReuseQueue.h" + +FOUNDATION_EXPORT double RBSReuseQueueVersionNumber; +FOUNDATION_EXPORT const unsigned char RBSReuseQueueVersionString[]; + diff --git a/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue.modulemap b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue.modulemap new file mode 100644 index 0000000..828ec7c --- /dev/null +++ b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue.modulemap @@ -0,0 +1,6 @@ +framework module RBSReuseQueue { + umbrella header "RBSReuseQueue-umbrella.h" + + export * + module * { export * } +} diff --git a/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue.xcconfig b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue.xcconfig new file mode 100644 index 0000000..0da7198 --- /dev/null +++ b/Example/Pods/Target Support Files/RBSReuseQueue/RBSReuseQueue.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/RBSReuseQueue +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" +PODS_BUILD_DIR = $BUILD_DIR +PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/RBSReuseQueue +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Example/RBSOdometer.xcodeproj/project.pbxproj b/Example/RBSOdometer.xcodeproj/project.pbxproj index 6c401a5..6dea026 100644 --- a/Example/RBSOdometer.xcodeproj/project.pbxproj +++ b/Example/RBSOdometer.xcodeproj/project.pbxproj @@ -305,10 +305,12 @@ inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-RBSOdometer_Example/Pods-RBSOdometer_Example-frameworks.sh", "${BUILT_PRODUCTS_DIR}/RBSOdometer/RBSOdometer.framework", + "${BUILT_PRODUCTS_DIR}/RBSReuseQueue/RBSReuseQueue.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RBSOdometer.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/RBSReuseQueue.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; diff --git a/RBSOdometer.podspec b/RBSOdometer.podspec index 58c6612..61b3e49 100644 --- a/RBSOdometer.podspec +++ b/RBSOdometer.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'RBSOdometer' - s.version = '0.1.0' + s.version = '0.1.1' s.summary = 'RBSOdometer is a ObjC library for smoothly transitioning numbers..' # This description is used to generate tags and improve search results. @@ -41,5 +41,5 @@ Pod::Spec.new do |s| #s.public_header_files = 'Pod/Classes/*.h' s.frameworks = 'UIKit' - # s.dependency 'AFNetworking', '~> 2.3' + s.dependency 'RBSReuseQueue', '~> 0.1.0' end diff --git a/RBSOdometer/Classes/RBSOdometerView.m b/RBSOdometer/Classes/RBSOdometerView.m index 5c74cac..28e5781 100644 --- a/RBSOdometer/Classes/RBSOdometerView.m +++ b/RBSOdometer/Classes/RBSOdometerView.m @@ -22,20 +22,43 @@ // THE SOFTWARE. #import "RBSOdometerView.h" +#import +#import + +static NSString *const kRBSReuseTextLayerIdentifier = @"RBSReuseTextLayerIdentifier"; + +@interface RBSReuseTextLayer : CATextLayer + +@end + +@implementation RBSReuseTextLayer +@synthesize reuseIdentifier = _reuseIdentifier; + +- (instancetype)initWithReuseIdentifier:(NSString *)reuseIdentifier { + self = [self init]; + if (self) { + self.reuseIdentifier = reuseIdentifier; + } + return self; +} +@end + +#pragma mark - RBSOdometerView static NSString *const kAnimationKey = @"RBSOdometerAnimationKey"; @implementation RBSOdometerView { - NSMutableArray *_numbersText; - NSMutableArray *_scrollLayers; - NSMutableArray *_scrollLabels; + NSMutableArray *_numbersText; + NSMutableArray *_scrollLayers; + NSMutableArray *_scrollLabels; NSCache *_fontSizeCache; NSDictionary *_attributes; NSString *_value; CGFloat _mainScreenScale; NSUInteger _lastNumber; NSInteger _animates; + RBSReuseQueue *_reuseQueue; } - (void)setFont:(UIFont *)font { @@ -77,6 +100,8 @@ - (void)commonInit { _mainScreenScale = [UIScreen mainScreen].scale; _lastNumber = 0; _animates = 0; + _reuseQueue = [[RBSReuseQueue alloc] init]; + [_reuseQueue registerClass:[RBSReuseTextLayer class] withReuseIdentifier:kRBSReuseTextLayerIdentifier]; } - (void)setupNumber:(NSUInteger)number { @@ -117,7 +142,11 @@ - (void)prepareAnimations:(BOOL)animate { [_numbersText removeAllObjects]; [_scrollLayers removeAllObjects]; - [_scrollLabels removeAllObjects]; + for (NSUInteger i = 0; i < _scrollLabels.count; i++) { + RBSReuseTextLayer *textLayer = _scrollLabels[i]; + [_scrollLabels removeObject:textLayer]; + [_reuseQueue enqueueReusableObject:textLayer]; + } NSString *endingNumberString = [self formatterNumberString:self.number]; NSString *startNumberString = [self formatterNumberString:_lastNumber]; @@ -209,7 +238,7 @@ - (void)createContentForLayer:(CAScrollLayer *)scrollLayer withStartDigitsString CGFloat offSetY = 0; for(NSString *text in textForScroll){ CGRect frame = CGRectMake(0, offSetY, CGRectGetWidth(scrollLayer.frame), CGRectGetHeight(scrollLayer.frame)); - CATextLayer *layer = [self createTextLayer:text]; + RBSReuseTextLayer *layer = [self reuseTextLayer:text]; layer.contentsScale = _mainScreenScale; layer.frame = frame; [scrollLayer addSublayer:layer]; @@ -246,8 +275,8 @@ - (BOOL)isNumberOfString:(NSString*)string { return result; } -- (CATextLayer *)createTextLayer:(NSString *)text { - CATextLayer *textlayer = [[CATextLayer alloc] init]; +- (RBSReuseTextLayer *)reuseTextLayer:(NSString *)text { + RBSReuseTextLayer *textlayer = (RBSReuseTextLayer*)[_reuseQueue dequeueReusableObjectWithIdentifier:kRBSReuseTextLayerIdentifier]; textlayer.foregroundColor = self.textColor.CGColor; CGFontRef fontRef = CGFontCreateWithFontName((__bridge CFStringRef)self.font.fontName);