@property(弱,非原子)或@property(非原子,弱)?哪一个最接近Apple指南?

时间:2015-09-06 01:58:28

标签: objective-c

如果我查看UIViewController.h,我可以在保留性之前看到原子性

@property(nullable, nonatomic, readonly, strong) NSBundle *nibBundle;

好像我将.xib中的元素拖放到对应文件中,它会在原子性之前生成可保留性:

@property (weak, nonatomic) IBOutlet UIView *testView;

来源:Xcode 7 beta 5。

建议使用哪一种或更严格遵循Apple指南?

2 个答案:

答案 0 :(得分:3)

  

建议使用哪一种或更严格遵循Apple指南?

属性的顺序并不重要,我不知道有关订单的任何指导原则。就个人而言,我通常将原子性说明符放在最后,因为它几乎总是相同的,而我最不关心的事情。一位好朋友把它放在第一位,因为当所有nonatomic指定符排列时,它最容易跳过。做你最喜欢的事。

答案 1 :(得分:-1)

编辑评论:

我尝试过:

NSPredicate *propertyPredicate = [NSPredicate predicateWithFormat:@"kind = %d", CXCursor_ObjCPropertyDecl];
NSMutableDictionary *properties = [NSMutableDictionary new];

[protocol visitChildrenMatchingPredicate:propertyPredicate withBlock:
^(CLNGEntity *property, CLNGEntity *parent)
{
    CXCursor cursor = property.cxCursor;
    CXType type = clang_getCursorType(cursor);
    CXString spelling = clang_getTypeSpelling(type);
    const char *cSpelling = clang_getCString(spelling);
    NSLog(@"Property type %s", cSpelling);
    return CXChildVisit_Continue;
}];

(不要关心CLNG…类型,它们是围绕相应CX…类型的简单Objective-C包装器。这里使用的唯一附加功能是访问匹配的块的可能性。 NSPredicate实例。)

但是,使用此代码我只得到属性的类型的拼写,i。即...

2015-09-16 10:18:33.689 obcl_cloudInterfaceExporter[1544:507] Property type NSString *

...但不是完整的财产声明。但我敢打赌,有一个函数可以打印(转储)整个游标。但我现在找不到它。抱歉。 (也许它只在C ++ API中,但后来我决定切换到C API。)

然而,既然你正在研究clang,那么如果我不记得那么完全错误,你将有更好的机会找到它。