/*
clang -g ExtendSuperclass.m -o ExtendSuperclass -framework Foundation -framework ProtectedCloudStorage -F/System/Library/PrivateFrameworks/ -framework CloudKit && ./ExtendSuperclass
*/
#include <assert.h>
#import <Foundation/Foundation.h>
#import <CloudKit/CloudKit.h>
#define SuperClass CKDatabase
@interface SubClass : SuperClass
@end
// class extension
@interface SuperClass ()
@property (nonatomic, strong) NSString *_sc_name;
@property (nonatomic, strong) NSString *_sc_name2;
@property (nonatomic, strong) NSString *_sc_name3;
@property (nonatomic, strong) NSString *_sc_name4;
@property (nonatomic, strong) NSString *_sc_name5;
@property (nonatomic, strong) NSString *_sc_name6;
@property (nonatomic, strong) NSString *_sc_name7;
@property (nonatomic, strong) NSString *_sc_name8;
@end
@implementation SuperClass (MySuperClass)
- (id)initThatDoesNotAssert
{
return [super init];
}
@end
@implementation SubClass
- (id)initThatDoesNotAssert
{
assert(_sc_name == nil);
assert(_sc_name2 == nil);
assert(_sc_name3 == nil);
assert(_sc_name4 == nil);
assert(_sc_name5 == nil);
assert(_sc_name6 == nil);
assert(_sc_name7 == nil);
assert(_sc_name8 == nil); // break here
if ((self = [super _initWithContainer:(CKContainer*)@"foo" scope:0xff])) {
assert(_sc_name == nil);
assert(_sc_name2 == nil);
assert(_sc_name3 == nil);
assert(_sc_name4 == nil);
assert(_sc_name5 == nil);
assert(_sc_name6 == nil);
assert(_sc_name7 == nil);
assert(_sc_name8 == nil);
_sc_name = @"empty";
}
return self;
}
@synthesize _sc_name;
@synthesize _sc_name2;
@synthesize _sc_name3;
@synthesize _sc_name4;
@synthesize _sc_name5;
@synthesize _sc_name6;
@synthesize _sc_name7;
@synthesize _sc_name8;
- (void)foo:(NSString*)bar { self._sc_name = bar; }
- (NSString*)description { return [NSString stringWithFormat:@"%p: %@", self, self._sc_name]; }
@end
int main()
{
SubClass *sc = [[SubClass alloc] initThatDoesNotAssert];
NSLog(@"%@", sc);
[sc foo:@"bar"];
NSLog(@"%@", sc);
sc._sc_name = @"bar2";
NSLog(@"%@", sc);
NSLog(@"%@", sc._sc_name);
return 0;
}