मैं कुछ कोरएनीमेशन सामान पर काम कर रहा हूं। कुछ दृश्य नियंत्रकों के साथ एक नेविगेशन नियंत्रक। और दृश्य नियंत्रकों के पास "ब्रोशर" के विभिन्न "पृष्ठों" के लिए UISCrollViews हैं। प्रत्येक पृष्ठ पर, कुछ एनीमेशन हो सकता है जो उपयोगकर्ता उस पृष्ठ पर फ़्लिप करते समय ट्रिगर हो जाता है।स्थैतिक चर?
मैं इस तरह कुछ कोशिश कर रहा था (एक शॉट एनीमेशन के लिए)।
void (^animationBlock)() =
^{
static bool alreadyTriggered = NO;
if(alreadyTriggered)
return;
[CATransaction begin];
[CATransaction setCompletionBlock:
^{
alreadyTriggered = YES;
}];
// Do me some animations...
[CATransaction commit];
};
NSMutableDictionary* pageBlocks = [[NSMutableDictionary alloc] init];
[pageBlocks setObject:[animationBlock copy] forKey:<animation's name>];
[self.animationBlocks setObject:pageBlocks forKey:<some page number>];
[pageBlocks release];
[animationBlock release];
"एनीमेशन का नाम" और "कुछ पृष्ठ संख्या" स्पष्टीकरण के लिए प्लेसहोल्डर हैं (वे मनमाने ढंग से NSString शाब्दिक हैं)।
और कोड है कि इन एनिमेशन से चलाता है:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
int pageNumber = floor(self.scrollView.contentOffset.x/self.scrollView.frame.size.width);
NSMutableDictionary* pageBLocks = [self.animationBlocks objectForKey:[NSString stringWithFormat:@"page%i",pageNumber]];
[CATransaction begin];
for(id key in pageBLocks)
((void (^)())[pageBLocks objectForKey:key])();
[CATransaction commit];
}
अब तक तो अच्छा है, केवल कि मैं नेविगेशन नियंत्रक से विवरणिका पॉप हैं (उर्फ विवरणिका पर dealloc कॉल) और उसे फिर से धक्का में , स्थिर बूल अभी भी सेट है।
मेरे विचार:
- मैं ब्लॉक बनाए रखने कर रहा हूँ? मुझे नहीं पता .. मैं इसे (प्रतिलिपि के साथ) शब्दकोश में जोड़ने के बाद रिलीज कर रहा हूं और ब्रोशर की डेलोक विधि शब्दकोष को रिलीज़ करता है।
- क्या मैं कहीं स्थिर बूल की एक और प्रतिलिपि रख रहा हूं? मेरा पहला बूल आवंटित किया जाता है जब मैं ब्लॉक को विधि के दायरे में स्थिर के रूप में घोषित करता हूं .. अच्छी तरह से उद्देश्य-सी की सक्रियण रिकॉर्ड योजना पर निर्भर करता है जिसे मैंने नहीं देखा है। लेकिन ऐसा मानते हुए, popViewcOntroller पर ऑब्जेक्ट जारी करते समय वह प्रतिलिपि समाप्त हो गई है। और जब इसे शब्दकोश में जोड़ते समय ब्लॉक पर आक्रमणकारी प्रतिलिपि से इसकी एक और प्रतिलिपि जारी की जानी चाहिए तो शब्दकोश को मार दिया जाना चाहिए?
क्या मैं पूरी ब्रोशर ऑब्जेक्ट को स्वयं बनाए रख रहा हूं? मुझे इसे पूरी तरह से ऐप्पल दस्तावेज़ से नहीं मिला, लेकिन वे कहते हैं कि यदि मैं संदर्भ द्वारा एक आवृत्ति चर का उपयोग करता हूं तो मैं स्वयं को बनाए रखता हूं। मैंने ब्लॉक के अंदर से खुद को रिहा करने की कोशिश की और सब ठीक चल रहा है ...?
मुझे नहीं लगता कि आप 'मिश्रण चाहिए साथ' Block_release() '[ब्लाकों प्रोग्रामिंग विषय] (http copy' है: // डेवलपर। apple.com/library/ios/#documentation/Cocoa/Conceptual/Blocks/Articles/bxUsing.html#//apple_ref/doc/uid/TP40007502-CH5-SW1) –
एह? ब्लॉक को ढेर से ढेर – SaldaVonSchwartz
पर ले जाने का तरीका यह है कि दस्तावेज़ आपको सुझाव देता है कि आपको ब्लॉक_रली() 'और' बैलेंस कॉपी या रिहाई के साथ बनाए रखना (या ऑटोरेलीज़) ' –