use*_*235 1 xcode objective-c ios automatic-ref-counting
我想测试弧下的属性属性.我NSString在Class1.h(接口文件)下创建了两个属性:
@interface Class1 : NSObject
@property (nonatomic, strong) NSString *str1;
@property (nonatomic, weak) NSString *str2;
@end
Run Code Online (Sandbox Code Playgroud)
然后我在Class1.m(实现文件)下创建了一个测试方法:
@implementation Class1
- (void)testMethod {
NSString *strt1 = @"exampleString1";
NSString *strt2 = @"exampleString2";
self.str1 = strt1;
self.str2 = strt2;
strt1 = nil;
strt2 = nil;
dispatch_queue_t aQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, QOS_CLASS_BACKGROUND);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), aQueue, ^{
[self testMethod2];
});
}
- (void)testMethod2 {
NSLog(self.str1);
NSLog(self.str2);
}
@end
Run Code Online (Sandbox Code Playgroud)
我在testMethod2方法中设置了一个断点然后检查我的NSString属性.我假设str2设置为nil但是在运行代码后结果是;
2015-07-03 14:14:04.412 ARCTEST [12303:6239959] exampleString1
2015-07-03 14:14:04.412 ARCTEST [12303:6239959] exampleString2
有人可以解释我为什么str2财产没有被释放?
Objective-c使用字符串文字池.这是所有字符串文字都是相同的(文本)指向同一个对象(因为字符串是不可变的).这些字符串永远不会被释放.如果您将strt2的分配更改为,它将按预期工作.
NSString *strt2 = [NSString stringWithFormat:@"%@", @"exampleString2"];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89 次 |
| 最近记录: |