In Xcode I have a view which does a modal segue to tab bar controller, and the first view in the tab bar is a UIViewController. This view performs a task on a timed basis (every 15 seconds) using [self performSelector:@selector(blah:) withObject:nil afterDelay:15]. I have some delegate methods that take me back to the root view and calls [self dismissViewControllerAnimated] which in my mind would unload the tab bar controller which would in turn unload the view that is performing the selector every 15 seconds. While those views do disappear after I call dismissViewControllerAnimated, the selectors continue to run every 15 seconds (I see them logging messages in the Xcode console). Am I wrong in my logic that these selectors should cease since their viewcontroller has been unloaded?
performSelector afterdelay still running even though I have unloaded the viewcontroller that it originated from
231 Views Asked by a344254 At
1
There are 1 best solutions below
Related Questions in XCODE
- Using Storyboard Reference
- Getting this message in my console in xcode "Ignoring restoreCompletedTransactionsWithApplicationUsername: because already restoring transactions"?
- Error when creating UIImage
- fade in an bounce animation subview
- How to delete static library ".a" file from xcode project?
- Error in main.storyboard
- Is the compiler Xcode uses to produce Assembly code a bad compiler?
- Using paths bonded to a XCode project to be shared
- How to set the time of Local notification in app to random between two times? (swift)
- "Invalid Signature, code object not signed at all" error
- Alarming memory increase with custom segue
- Display both alertTitle and AlertBody on a custom WatchKit notification
- How to make a CocoaPods project work on OS X El Capitan & Xcode 7 Beta?
- Cannot use CTRL+Drag for making a button action in Xcode?
- Labels properties changing in Xcode
Related Questions in PERFORMSELECTOR
- SKAction repeatActionForever not spawning entity
- performSelector:@selector withObject:nil afterDelay: not calls method (Objective C)
- performSelector is calling new in if loop
- performSelector error with global function and AppDelegate class
- Selector In Swift 3.0
- performSelector afterdelay still running even though I have unloaded the viewcontroller that it originated from
- In ios how to perform a method with NSData return type in background
- iOS: perform performSelector using nsstring : performSelector may cause a leak because its selector is unknown
- Using PerformSelector with @selector in MonoTouch
- PerformSelector warning
- How to resolve "no known instance method for selector 'performSelector:withObject:afterDelay:'" when migrating to ARC?
- `cancelPerformSelectorsWithTarget:` vs `cancelPreviousPerformRequestsWithTarget:`
- performSelector with time delay does not work in for loop - iPhone
- How to stop UIView from interrupting performSelector
- How does performSelector:withObject:afterDelay: work?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Not always. It depends on your classes, if you have a strong reference to the controller or the timer somewhere it may not actually be released. It could also be that since the timer was never invalidated it's keeping the view controller from releasing. Timers are interesting in that they can cause behavior like this if not invalidated, it's always good practice to clean them up when you're done with them. If you're using recursion to call the timed method on itself every 15 seconds that could also keep the view from being released.
If you're using a timer you'll want to invalidate it when appropriate, on view disappear probably. If you want to run once after view disappear you'll need to set a bool so you know when the view disappeared so you can run it once more.
If you're using recursion, be really careful. Something like that can run on a background thread indefinitely. Again if you only want it to run while the view is the active view you can do a check to see which view is on top and only call the method recursively in that scenario, or set a bool on appear and disappear and check the bool when the method calls itself.