[英]iOS why does this property needs to be strong
我有一个我认为可能很弱的属性。 但是,除非将其设置为“强”,否则它不会显示。
这个:
- (void) setTimeAndLocation:(Message *)activity{
__weak NSString *time = [[[activity getPropertyByPath:@"StartTime"] value] substringWithRange:NSMakeRange(0, 5)];
NSLog(@"Time: %@", time); // null
__strong NSString *time = [[[activity getPropertyByPath:@"StartTime"] value] substringWithRange:NSMakeRange(0, 5)];
NSLog(@"Time: %@", time); // works, 20:30
__weak NSString *time = [[activity getPropertyByPath:@"StartTime"] value];
NSLog(@"Time: %@", time); // works, 20:30:00
}
这是因为子字符串创建了一个新字符串还是类似的东西? 我知道我不必添加__weak或__strong,但这对我来说有助于理解所有功能
time
是局部变量,而不是属性。
通常,所有局部变量都是__strong
(这是您省略修饰符时的默认值),因为它们在超出范围时会被自动处置。
您永远不会为新创建的对象声明局部变量__weak
,因为对象一创建就将被销毁。 正如您提到的,我怀疑substringWithRange:
创建了一个新对象。
第二个作品的事实令人误解。 声明局部变量__weak
,除非您知道要访问在其他位置强烈保留的对象,否则无法保证该变量将可用。 在两种情况下,变量均应为__strong
(无修饰符)。
当您要为先前创建的对象创建弱局部变量时使用__weak
,该变量在其他位置强烈引用。 通常,如果希望避免在保留的块内保留循环,请使用__weak
变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.