将@properties用于私有变量只是为了内存管理的好处是"坏"吗?

ben*_*ord 9 properties objective-c

为内存管理带来的好处,为私有变量创建@properties是不是很糟糕?

对于许多私有变量,让公众面对@properties似乎是混乱和错误的.

(主要是,我在低内存条件下使用相应的"事件"方法释放私人ivars.)

示例: 我通常这样做是为了发布一个私有的ivar:

[name release]; name = nil;
Run Code Online (Sandbox Code Playgroud)

但是使用@properties,我可以这样做:

self.name = nil;
Run Code Online (Sandbox Code Playgroud)

稍后在我的代码中,将执行此操作,因此需要设置为nil:

if( !name)
    name = [[NSString alloc] initWithFormat:@"Hi %@",inputName];
Run Code Online (Sandbox Code Playgroud)

and*_*n22 23

另一种方法是保持财产私有.您可以使用以下代码(在.m文件中)使该属性仅在您的类中可访问:

#import "MyClass.h"

@interface MyClass ()
    @property (retain) NSString* privateString; 
@end

@implementation MyClass

    @synthesize privateString;
    // Your code here

@end
Run Code Online (Sandbox Code Playgroud)

现在你已经获得了属性的简易性,但是其他类仍然无法访问它,即使它们导入你的.h文件!

  • 它不是黑客,它是一种称为扩展的类别的明确形式.<https://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW2>."类通常具有公开声明的API,然后私有声明其他API,仅供类所在的类或框架使用" (13认同)
  • 它绝对不是一个黑客,并且100%符合为什么首先将类扩展添加到语言中.热情地拥抱这种模式. (5认同)