我已经看到了用于放置花括号的Objective-C(Cocoa/Cocoa Touch)的不同约定.
我见过的两个是:
- (void)dealloc {
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
与
- (void) dealloc
{
[super dealloc];
}
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑,因为我希望对于这样一个相当小的社区来说,应该只有一个公约.
哪两个更常见?
有没有办法在预处理器中获取当前范围的类?
目前,我正在做的是以下内容:
我有一个宏:
#define DATA_SOURCE_DEF_CONSTR(CLASS) + (CLASS *)dataSource { \
CLASS *source = [[[CLASS alloc] init] autorelease]; \
return source; \
}
Run Code Online (Sandbox Code Playgroud)
然后我在许多类中使用该宏,如:
DATA_SOURCE_DEF_CONSTR(SpecialDataSource)
Run Code Online (Sandbox Code Playgroud)
我想要像:
#define DATA_SOURCE_DEF_CONSTR + (__CLASS__ *)dataSource { \
__CLASS__ *source = [[[__CLASS__ alloc] init] autorelease]; \
return source; \
}
Run Code Online (Sandbox Code Playgroud)
称之为:
@implementation ...
DATA_SOURCE_DEF_CONSTR
...
@end
Run Code Online (Sandbox Code Playgroud)
使用预处理器在Objective-C中可以实现吗?
似乎从最近几次开始,视图控制器会自动加载具有确切名称的nib文件(如果存在).
我可以简单地初始化一个视图控制器
[[[ViewController alloc] init] autorelease]
Run Code Online (Sandbox Code Playgroud)
然后当把它推到导航控制器上时,笔尖会在没有做任何事情的情况下加载.
这适用于我的应用程序,除了一个视图控制器,我没有弄清楚原因.所有自动加载其笔尖的视图控制器可能都是在Xcode 4中创建的,而唯一一个不能工作的视图控制器可以在Xcode 3中创建.在某处有隐藏的开关吗?我没有在nib的文件设置中找到任何东西,nib本身并没有任何可以解释它的视图控制器的源代码.
当我将XCode 4中的预处理器宏添加到我的一个目标时,它会被使用,并且按照我的预期进行条件编译.
但是,如果我将该设置移动到项目级别并从我的一个目标中移出,则预处理器宏显然会被忽略而根本不会被使用.
我确认,如果我通过仅在启用该宏时编译的日志记录将其放入项目的构建设置中,则根本定义宏.
怎么可能?
系统:OS X Lion,XCode 4.1 build 4B110,用于iOS 4.3.5,使用LLVM编译器,而不是GCC.
更改通知与KVO级联到他们的属性或是否有任何优雅的方式,不包括通过简单地观察父和子更改手动实现它?
假设我们有一个User类和一个Document类.一个用户可以拥有任何数量的文档.现在让我们假设我有一个视图控制器显示有关文档的详细信息,我们还假设我在某处存储了一个名为currentUser的变量.如果我现在观察一个文档对象属于那个也是currentUser的值的用户,并且我将currentUser更改为另一个用户,则更改通知"级联"将向下移动到仅观察文档对象的视图控制器属于以前的"currentUser"?