我一直在阅读有关在iOS中使用#define宏的相互矛盾的信息,以及它们是仅在编译时运行还是在运行时运行.
考虑我的情况:我想定义一个返回BOOL的宏,该BOOL与屏幕是大尺寸还是小尺寸有关,这里是代码:
#define TTThisScreenWidth [[UIScreen mainScreen] bounds].size.width
#define TTLargeScreenTrushHold 700.0f
#define TTScreenIsOfLargeSize (TTThisScreenWidth > TTLargeScreenTrushHold)
Run Code Online (Sandbox Code Playgroud)
问题:如果此代码仅在编译时运行,则屏幕大小将在编译到的设备上修复,并且在具有不同屏幕的设备上运行时不返回正确的答案.
但是:我检查了它,它在iPad上完美运行,最初编译为iPhone(通用应用程序)
所以:不安全吗?
谢谢!
我想问一个关于良好代码实践和MVC模型的理论问题,以下是这种情况:
该设计包含一个RootViewController和一个单例类.单例充当控制器,具有应在整个应用程序中可用的计时器对象.计时器对象由UISwitch和NSTimer组成,它们都由单例控制器拥有,因此可以根据需要将UISwitch添加到新的viewControllers,并且可以在整个应用程序中访问计时器对象.
为了使用当前计时器的计数更新RootViewController的屏幕,我在RootViewController的单例中创建了一个指针,并让RootViewController将自己设置为该指针,类似于[singeltonOBject setDelegate:self].使用此设计,当计时器滴答时,可以从单例访问和更新RootViewController的UILabel.我选择这样做是因为我没有时间实施常规代表.
请注意,RootViewController由AppDelegate拥有,单例类显然不归RootViewController所有.因此没有保留周期.
问题:从单例到RootViewController的指针设置和从单例控制器更新UILable是否违反了良好的编码习惯,是否有任何基本原则未得到满足?
感谢您的回答!