Starting with ios 9 it is not necessary to unsubscribe from notification center since ios handles this automatically, but prior to ios 9 developers had to manually call NotificationCenter.default.removeObserver(self) in order to avoid memory leaks and common place for this was(it is suggested in a lot of tutorials and Stackoverflow posts) deinit. So, my question is - how it was possible to use deinit to unregister from notifications since deinit is only called before objects deallocation, so its ref count should be 0, but for sure it is not - since we're still subscribe to the notification center. The only possible way to achieve this seems to be use of weak references, basically if notification center references object weakly the above mentioned scenario is possible, but in this case unsubscribing is not needed at all since the object can be easily deallocated. Can somebody clarify a bit on how this works.
NotificationCenter.default.removeObserver(self) in deinit, why deinit it even get called?
1.3k views Asked by starwarrior8809 At
1
There are 1 answers
Related Questions in IOS
- URLSession requesting JSON array from server not working
- Incorrect display of LinearGradientBrush in IOS
- Module not found when building flutter app for IOS
- How to share metadata of an audio url file to a WhatsApp conversation with friends
- Occasional crash at NSURLSessionDataTask dataTaskWithRequest:completionHandler:
- Expo Deep linking on iOS is not working (because of Google sign-in?)
- On iOS, the keyboard does not offer a 6-character SMS code
- Hi, there is an error happened when I build my flutter app, after I'm installing firebase packages occurs that error
- The copy/paste functionalities don't work only on iOS in the Flutter app
- Hide LiveActivityIntent Button from Shortcuts App
- While Running Github Actions Pipeline: No Signing Certificate "iOS Development" found: No "iOS Development" signing certificate matching team ID
- Actionable notification api call not working in background
- Accessibility : Full keyboard access with scroll view in swiftui
- There is a problem with the request entity - You are not allowed to create 'iOS' profile with App ID 'XXXX'
- I am getting "binding has not yet been initialized" error when trying to connect firebase with flutter
Related Questions in SWIFT
- Navigate after logged in with webservice
- URLSession requesting JSON array from server not working
- When using onDrag in SwiftUI on Mac how can I detect when the dragged object has been released anywhere?
- Protect OpenAI key using Firebase function
- How to correct error: "Cannot convert value of type 'MyType.Type' to expected argument type 'Binding<MyType>'"?
- How to share metadata of an audio url file to a WhatsApp conversation with friends
- Using @Bindable with a Observable type in SwiftUI
- How to make a scroll view of 9 images in a forEach loop open on image 6 if image 6 is clicked on from a grid?
- Using MTLPixelFormat.rgba16Float results in random round-off errors
- Search and highlight text of current text in PDFKit Swift
- How is passing a function as a parameter related to escaping autoclosure?
- Actionable notification api call not working in background
- Custom layout occupies all horizontal space
- Is it possible to fix slow CKAsset loading on Cloudkit?
- Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value - MapView.isMyLocationEnabled
Related Questions in NSNOTIFICATIONCENTER
- Why can't I receive a notification sent from Camera Extension(Swift) to an observer application (obj-c++)
- Using custom NotificationCenter
- 'UIApplicationWillResignActiveNotification' calling twice for several devices\simulators
- playerItemDidReachEnd reliability issues
- How to get notified when iOS music app changes state
- Preventing state reset when app moves from background to foreground
- .onReceive NSWindow.willCloseNotification called for every window in App?
- Some NSNotification.Name constants are missing when enabling C++ interoperability
- How to listen for systemDidWake events on macOS?
- Catch Pasted Text on TextField SwiftUI
- PostingStyle of NotificationQueue
- Why is the notification observer not triggering the selector function correctly when monitoring the iOS device's power mode status?
- .onRecieve is one step behind
- iOS How to receive and store system NSNotification in a SwiftUI application?
- NSNotification not being received in another class
Related Questions in DEINIT
- Should an Instance of a Swift Class be assigned to `nil` to see the deinitializer in action?
- memory leaking in custom button memory problems
- Remove UIViewController from UIView and release memory
- Cannot Form Weak Reference To Instance Of Class - Swift Error
- When is `deinit` exactly called? (in Swift)
- deinit is not being called. Help me fix this
- NotificationCenter.default.removeObserver(self) in deinit, why deinit it even get called?
- ViewController passed as parameter is not being deinitialized (Swift)
- Testing for UINavigationController deallocation is failing?
- Deinitialization order is different when creating array differently
- UIViewController initialized via UIStoryboard.instantiateViewController does not deinit during unit test when set to nil
- Swift: How to deallocate properties when init throw?
- Save data to database before viewcontroller deallocated
- RxSwift | Initialize and push UIViewController in closure
- De-initialzing a ViewController after dismissal?
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?
Popular Tags
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)
I think that prior to iOS9 NotificationCenter was adding observers as unretained pointers. Thus the point of removing observers in dealloc was not to prevent retain cycle but to prevent a crash when notification to released object could be sent.
From the iOS9 the NotificationCenter started using zeroing-weak referencing so it became possible to skip removing observers. You could find more details in the release notes: