ClassA.m
ClassB *CB = [[ClassB alloc]init];
CB.name = @"my name";
[self presentViewController:CB animated:YES completion:nil];
班B.h
@interface ClassBViewController : UIViewController
@property (nonatomic, strong) NSString *name;
@end
此代码工作正常,但是从A类CB.name = @"my name";
在B类中设置值是正确的方法吗?
通过将属性定义为强属性,您可以保留对对象的强引用。
考虑一下如果有人给你一个NSMutableString
会发生什么。您保留对它的引用,然后他们稍后更改它。你不再有他们给你的字符串。
如果你使用复制而不是强,你会强制复制对象(如果他们给你一个不可变的对象,通常会被优化掉),这意味着你总是保留你实际得到的东西。
对于属性,我发现写 [CB setName:@"my name"] 更清晰。您需要在 ClassB.m 文件中有一个 @synthesize 语句,以便编译器为您的属性创建一个 getter 和一个 setter。
这实际上是唯一的方法。 Class A
对Class B
的属性一无所知,所以一个Class B
的对象必须在Class A
内部实例化才能访问它的属性。