1 #import <Foundation/Foundation.h> 2 #include <stdio.h> 3 4 @interface MyString : NSObject { 5 NSString *str; 6 NSDate *date; 7 BOOL _is_valid; 8 } 9 10 - (id)initWithNSString:(NSString *)string; 11 - (BOOL)isValid; 12 @end 13 14 @implementation MyString 15 - (id)initWithNSString:(NSString *)string 16 { 17 if (self = [super init]) 18 { 19 str = [NSString stringWithString:string]; 20 date = [NSDate date]; 21 } 22 _is_valid = YES; 23 return self; 24 } 25 26 - (BOOL)isValid 27 { 28 return _is_valid; 29 } 30 31 - (void)dealloc 32 { 33 [date release]; 34 [str release]; 35 [super dealloc]; 36 } 37 38 - (NSString *)description 39 { 40 return [str stringByAppendingFormat:@" with timestamp: %@", date]; 41 } 42 @end 43 44 void 45 Test_MyString (const char *program) 46 { 47 NSString *str = [NSString stringWithFormat:@"Hello from '%s'", program]; 48 MyString *my = [[MyString alloc] initWithNSString:str]; 49 if ([my isValid]) 50 printf("my is valid!\n"); 51 52 NSLog(@"NSString instance: %@", [str description]); // Set breakpoint here. 53 // Test 'p (int)[my isValid]'. 54 // The expression parser should not crash -- rdar://problem/9691614. 55 56 NSLog(@"MyString instance: %@", [my description]); 57 } 58 59 int main (int argc, char const *argv[]) 60 { 61 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 62 63 Test_MyString (argv[0]); 64 65 [pool release]; 66 return 0; 67 } 68