I am trying to understand how ARC works, and as far as I know, I have to do something wrong here. This is the code I'm using:
Interface:
@interface ViewController : UIViewController{
}
@property (strong, nonatomic) NSString * myString ;
@property (weak, nonatomic) NSString * myPointer ;
Implementation:
- (void)viewDidLoad{
[super viewDidLoad];
self.myString = @"Hello world!" ;
self.myPointer = self.myString ;
[self performSelector:@selector(makeNilMyValue) withObject:nil afterDelay:1];
[self performSelector:@selector(printValues) withObject:nil afterDelay:2];
}
- (void) makeNilMyValue{
self.myString = nil ;
}
- (void) printValues{
NSLog(@"myString: %@", self.myString) ;
NSLog(@"myPointer: %@", self.myPointer) ;
}
After doing this, I get:
2012-02-26 11:40:41.652 test1[933:207] myString: (null)
2012-02-26 11:40:41.653 test1[933:207] myPointer: Hello world!
If I'm not mistaken, due to the weak myPointer, it should not save the contents of the object. Thus, it should show nil instead of "Hello World!"
What am I doing wrong?
After Caleb's answer, I created another weak pointer, see the code below:
- (void)viewDidLoad{
[super viewDidLoad];
self.myString = @"Hello world!" ;
self.myPointer = self.myString ;
self.myPointer2 = self.myString ;
[self performSelector:@selector(makeNilMyValue) withObject:nil afterDelay:1];
[self performSelector:@selector(printValues) withObject:nil afterDelay:2];
}
- (void) makeNilMyValue{
self.myPointer2 = @"value changed!" ;
self.myString = nil ;
}
- (void) printValues{
NSLog(@"myString: %@", self.myString) ;
NSLog(@"myPointer: %@", self.myPointer) ;
}
The fact is that I still had the same answer that I had:
2012-02-26 12:08:13.426 test1[1333:207] myString: (null)
2012-02-26 12:08:13.427 test1[1333:207] myPointer: Hello world!
source
share