繁体   English   中英

iOS为什么此属性需要强大

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM