gpt4 book ai didi

iphone - objective-C 中的私有(private)和公共(public)属性

转载 作者:可可西里 更新时间:2023-11-01 17:10:24 26 4
gpt4 key购买 nike

那么这两个版本之间的实际区别是什么:

@interface Foo : NSObject
// A guy walks into a bar.
@property(nonatomic, copy) NSString *bar;
@end

// Implementation file
@interface Foo ()
@property(nonatomic, retain) NSArray *baz;
@end

@interface Foo : NSObject
// A guy walks into a bar.
@public
@property(nonatomic, copy) NSString *bar;

@private
@property(nonatomic, retain) NSArray *baz;
@end

就我的理解而言,将@property 放在.m 中基本上意味着它是私有(private)的。如果我错了,请纠正我?那么哪个是最好的实现呢?它只是一种编码风格/实践吗?

最佳答案

编译器可以就它知道的事情向您发出警告。

当我导入您的 header 时,编译器可以看到 Foo 有一个名为 barsetBar: 的方法。这意味着我可以同时使用它们

[instanceOfFoo setBar:@"some string"];

NSLog(@"%@", [instanceOfFoo bar]);

而因为我只导入了 header - 编译器只能看到 header ,它不知道还有方法 bazsetBaz: 可用,所以这样做以下将导致编译器 barf

[instanceOfFoo setBaz:@"some string"];

NSLog(@"%@", [instanceOfFoo baz]);

但是,如果我知道这些属性存在,我仍然可以通过像这样使用 KVC 而无需编译器 barfing 来访问这些属性

[instanceOfFoo setValue:@"some string" forKey:@"baz"];

NSLog(@"%@", [instanceOfFoo valueForKey:@"baz"]);

关于iphone - objective-C 中的私有(private)和公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10746076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com