gpt4 book ai didi

objective-c - 为什么这种不寻常的 Objective-C 设计模式是个坏主意?

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:50 24 4
gpt4 key购买 nike

<分区>

我最近加入了一个新项目,该项目有一个庞大的现有代码库,该项目频繁使用我以前在实践中或在任何文献中从未遇到过的模式。

举个例子:

A类.h

@interface ClassA : UIViewController
@end

A类.m

@interface ClassA ()
@property (nonatomic,weak) IBOutlet UILabel *labelOne;
@property (nonatomic,weak) IBOutlet UILabel *labelTwo;
@end

@implementation ClassA
//...
@end

类AHelper.h

@interface ClassAHelper : NSObject
- (void)configureClassA:(ClassA *)classA;
@end

ClassAHelper.m

// here's the 'interesting' bit
@interface ClassA ()
@property (nonatomic,weak) UILabel *labelTwo;
@end

@implementation ClassAHelper

- (void)configureClassA:(ClassA *)classA {
classA.labelTwo.text = @"wtf?";
}

@end

所以基本上,类的声明没有(或很少)外部接口(interface),访问这些类的属性是通过声明这些属性来实现的,访问类对访问类的实现文件中的匿名类别感兴趣。

我知道在 Objective-C 中没有真正私有(private)实例属性这样的东西,所有的 ivar 在运行时之前都是相等的。我知道,从编译器的角度来看,在其他类的 .m 中内联匿名类别与从公共(public) .h 中#including 它没有任何区别。我明白了,因为第二类扩展对该类的 .m 不可见,所以编译器不会尝试合成第二组属性。但是,这种做法还是让我感到不安。不幸的是,我能提出的唯一实际提示是使用这种方法意味着必须保持两组属性声明同步。

那么对你来说:你能提出一个有效的技术理由,说明为什么这种方法应该在谷仓后面被取出来射杀吗?或者,告诉我为什么我没有什么可担心的(虽然我想要比“好吧,它有效,不是吗?”更实质性的东西)。

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