A safer and easier way to use NSNotificationCenter with blocks.
Objective-C Ruby
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
ExampleApp
MCSNotificationController.xcodeproj
MCSNotificationController
MCSNotificationControllerTests
.gitignore
.travis.yml
LICENSE
NotificationController.podspec
README.md
StyleSettings.plist

README.md

NotificationController

Build Status Carthage compatible

NotificationController provides a better way to use NSNotificationCenter on iOS and Mac.

Features:

  • compile-time warnings for retain-cycles in the block-based API
  • prevention from registration for the same notification more than once
  • automatic unregistration from notifications in -dealloc

We encourage you to learn about the underlying implementation from the blog post.

Usage

Fully working example is as simple as:

__weak typeof(self) weakSelf = self;

self.notificationController = [[MCSNotificationController alloc] initWithObserver:self];
[self.notificationController addObserverForName:MCSNotification sender:nil queue:nil usingBlock:^(NSNotification *note) {
    [weakSelf doSomething];
}];

or

self.notificationController = MCSNotificationController(observer: self)
self.notificationController?.addObserverForName(name, sender: nil, queue: nil, usingBlock: {  [weak self] (_) -> Void in
    self.doSomething()
})

Above examples assume that there's a strongly held notificationController property on that object. Deregistration happens automatically on the controller's deallocation.

There's also a category on NSObject that creates a lazy-loaded mcs_notificationController property for you. So, Objective-C example can get even shorter:

__weak typeof(self) weakSelf = self;

[self.mcs_notificationController addObserverForName:MCSNotification sender:nil queue:nil usingBlock:^(NSNotification *note) {
    [weakSelf doSomething];
}];

That's all you have to do to safely use notifications with blocks. You should also see an example app and comments in the header.

Requirements

  • iOS 7 and above
  • OS X 10.9 and above

Installation

Install with Carthage:

github "macoscope/NotificationController"

or with CocoaPods:

pod "NotificationController"

Then import with: #import <NotificationController/MCSNotificationController.h>

Copyright

Published under the MIT License. Copyright (c) 2015 Macoscope sp. z o.o.