1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- // Copyright 2016 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #if defined(__has_feature) && __has_feature(objc_arc)
- #error "ARC manages properties, so base::mac::ReleaseProperties isn't needed."
- #endif
- #ifndef BASE_MAC_OBJC_RELEASE_PROPERTIES_H_
- #define BASE_MAC_OBJC_RELEASE_PROPERTIES_H_
- #import <Foundation/Foundation.h>
- #include "base/base_export.h"
- // base::mac::ReleaseProperties(self) can be used in a class's -dealloc method
- // to release all properties marked "retain" or "copy" and backed by instance
- // variables. It only affects properties defined by the calling class, not
- // sub/superclass properties.
- //
- // Example usage:
- //
- // @interface AllaysIBF : NSObject
- //
- // @property(retain, nonatomic) NSString* string;
- // @property(copy, nonatomic) NSMutableDictionary* dictionary;
- // @property(assign, nonatomic) IBFDelegate* delegate;
- //
- // @end // @interface AllaysIBF
- //
- // @implementation AllaysIBF
- //
- // - (void)dealloc {
- // base::mac::ReleaseProperties(self);
- // [super dealloc];
- // }
- //
- // @end // @implementation AllaysIBF
- //
- // self.string and self.dictionary will each be released, but self.delegate
- // will not because it is marked "assign", not "retain" or "copy".
- //
- // Another approach would be to provide a base class to inherit from whose
- // -dealloc walks the property lists of all subclasses to release their
- // properties. Distant subclasses might not expect it and over-release their
- // properties, so don't do that.
- namespace base {
- namespace mac {
- namespace details {
- BASE_EXPORT void ReleaseProperties(id, Class);
- } // namespace details
- template <typename Self>
- void ReleaseProperties(Self* self) {
- details::ReleaseProperties(self, [Self class]);
- }
- } // namespace mac
- } // namespace base
- #endif // BASE_MAC_OBJC_RELEASE_PROPERTIES_H_
|