Skip to content

Instantly share code, notes, and snippets.

@McZonk
Created April 3, 2013 08:54
Show Gist options
  • Save McZonk/5299575 to your computer and use it in GitHub Desktop.
Save McZonk/5299575 to your computer and use it in GitHub Desktop.
#import <Foundation/Foundation.h>
@interface MyObject : NSObject
- (id)initWithName:(NSString*)name;
@property (nonatomic, retain) NSString* name;
@end
@implementation MyObject
- (id)initWithName:(NSString*)name {
self = [self init];
if(self != nil) {
self.name = name;
NSLog(@"> %@ %lu init", self.name, self.retainCount);
}
return self;
}
- (void)dealloc {
self.name = nil;
[super dealloc];
}
- (id)retain {
id r = [super retain];
NSLog(@"> %@ %lu retain", self.name, self.retainCount);
return r;
}
- (oneway void)release {
NSString* name = [self.name retain];
NSUInteger retainCount = self.retainCount - 1;
[super release];
NSLog(@"> %@ %lu release", name, retainCount);
[name release];
}
- (id)autorelease {
id r = [super autorelease];
NSLog(@"> %@ %lu autorelease", self.name, self.retainCount);
return r;
}
@end
@interface OtherObject : NSObject
@property (nonatomic, retain) MyObject* myObject;
@end
@implementation OtherObject
- (void)dealloc {
self.myObject = nil;
[super dealloc];
}
@end
int main(int argc, const char** argv) {
@autoreleasepool {
{
OtherObject* otherObject = [[OtherObject alloc] init];
{
MyObject* myObject = [[MyObject alloc] initWithName:@"C"];
otherObject.myObject = myObject;
[myObject release];
}
NSLog(@"%@", otherObject.myObject);
{
MyObject* myObject = [[MyObject alloc] initWithName:@"D"];
otherObject.myObject = myObject;
[myObject release];
}
NSLog(@"%@", otherObject.myObject);
[otherObject release];
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment