objective-c - Outlet 应该有 getter/setter 吗?

标签 objective-c macos cocoa-touch cocoa interface-builder

我应该总是更好地写

    @interface MyClass
    {
        NSTextField * myTextField ;
    }
    @property (assign)  NSTextField * myTextField ;

或者只是

    @interface MyClass
    {
        NSTextField * myTextField ;
    }

为什么我有理由认为我们应该添加 @property 行:

  • 我最近有一个程序,如果 socket 没有 getter/setter,则该程序将无法工作。

  • 另外:我们在创建项目时发现了以下行

    @property (assign) IBOutlet NSWindow *window;
    

最佳答案

一旦为 socket 对象或任何其他对象创建属性,就会为其创建ivar(在新编译器中)。

现在创建 ivars 和属性已过时。 甚至属性也会与自动合成相匹配。

如果您确实想要 ivars,那么您可以将其放入 .m 文件中,或者如果您希望它们是私有(private)的,则可以使用它们向类添加扩展。

Should outlet have setter/getter

是的,您确实需要多次访问它们。例如检查单选按钮、复选框的状态、设置 stringValue 为 NSTextField、通过 [tableView reloadData] 重新加载表格等。

@interface MyClass
    {
        NSTextField * myTextField ; //this is ivar
    }
    @property (assign)  NSTextField * myTextField ; //this is property
@end

无论您在 .h 中放入的内容都是公共(public)且可访问的,如果您想将其隐藏,请在 .m 中进行操作,即使是在扩展名。

关于objective-c - Outlet 应该有 getter/setter 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15505771/

相关文章:

iOS 导航 Controller pushViewController 不工作

iphone - 在 NSArray 中访问 NSDictionary

ios - Firebase 和通用链接冲突

macos - 在 MacOSX Leopard 上安装 ASP.NET 的 mod_mono

ios - kABPersonEmailProperty 返回奇怪的东西

ios - 替换 `fabs` 、 `fmax` 等,用于 64 位 iOS 设备上的 CGFloat

objective-c - Interface Builder 未正确调整大小

objective-c - 如何在windows下用独立的MingW编译一个objective c程序

python - 更改 Mac OS 下除终端以外的应用程序的 Python 路径

c++ - 是否可以在没有头文件的情况下链接dylib?