我正在做一个关于在Xcode中调试的演示文稿,并希望获得有关使用NSLog的更多信息.
特别是,我有两个问题:
我需要-init在Objective-C中隐藏(私有)我的类的方法.
我怎样才能做到这一点?
我正在学习Objective-C,并且拥有C/C++背景.
在面向对象的C++中,总是需要在定义(实现)它之前声明方法,即使它是在父类中声明的.
在过程式C,IIRC中,只要定义一个函数,只要从同一个编译单元中的其他东西(即同一个文件)调用它就可以远离文件中的某个函数(嗯,提供)你没有在其他地方用"extern"声明它.
现在,在Objective-C中,您似乎只需要在头文件中声明选择器,如果它们将被外部使用,并且您可以在.m文件中组合选择器就好了,并在其中调用它们.m文件.此外,似乎永远不会(重新)定义委托方法或继承的方法.
我是在正确的轨道上吗?什么时候需要在Objective-C中定义一个选择器?
我正在使用套接字编程.我只是想清除与我从 - mobileorchard.com - Chatty下载的代码相关的疑问.在研发时,我在ChatRoomViewController.m文件中看到了一个函数调用
[chatRoom broadcastChatMessage:input.text fromUser:[AppConfig getInstance].name];
Run Code Online (Sandbox Code Playgroud)
当我在Room.m 文件中看到,用于执行上面的调用; 它是
- (void)broadcastChatMessage:(NSString*)message fromUser:(NSString*)name
{
// Crude way to emulate an "abstract" class
[self doesNotRecognizeSelector:_cmd];
}
Run Code Online (Sandbox Code Playgroud)
我用google搜索"doesNotRecognizeSelector:",根据Apple的错误处理,声明"只要对象收到一个无法响应或转发的aSelector消息,运行时系统就会调用此方法." 我的问题是为什么开发人员调用broadcastChatMessage:fromUser: function如果它没有在那里使用并处理哪个方法的"未找到选择器"异常?
根据Stackovrflow,它用于创建抽象类,根据这个问题,它避免了"不完整实现"的警告.
我仍然没有理解为什么在Chatty Code中使用该方法,请帮助我理解使用该方法的原因.
我想通过编写@protocol解决了这个问题.
但我渴望知识.是否有一些标志或其他方式要求子类覆盖特定方法而不是调用super?与NS_REQUIRES_SUPER/objc_requires_super相反?
所以我一直在阅读关于Objective-C的模板方法,我试图了解它们的特殊之处.根据我的理解,Base类中的任何方法都可以被覆盖并且可以调用super吗?那么模板方法不仅仅是覆盖基类中的方法吗?
如果我错了,你能解释一下模板方法模式是什么,你能提供一个例子吗?
我有一个基本视图控制器,许多其他视图控制器子类.有没有办法强制执行某些必须在子类中重写的方法?
为了安全起见,比什么都重要.
干杯
是否可以在@protocol中声明变量?只是为了强制程序员在实现类(实现此协议的类)头和实现中添加这些变量?
谢谢
我正在学习iOS开发,我遇到了具体而抽象的课程.这些课程有什么区别.我在网上搜索过,但他们用的是其他语言,而不是Objective-C.
objective-c ×10
ios ×5
iphone ×2
nsobject ×2
api-design ×1
cocoa ×1
cocoa-touch ×1
declaration ×1
definition ×1
enforcement ×1
inheritance ×1
methods ×1
nslog ×1
protocols ×1
xcode ×1