我有一个与Cocoa框架设计模式相关的基本问题.
委托和数据源之间有什么区别?
它们都可以使用@protocols
声明,但是一些类或框架正在使用delegate
,而另一些正在使用datasource
.
我可以理解的UI/NSTableView
是delegate
对UI相关事件的响应,而datasource
与数据完全相关.但是,我不知道Cocoa的UI类之外的任何数据源实现.
注意:
任何人都可以解释在浏览器和Web服务器之间进行通信的方式吗?我想学习如何
在幕后工作.
SOAP和HTTP协议之间有什么区别.当我们说"SOAP over HTTP"时,这是什么意思.
在为各种项目编写了几种不同的自定义串行协议之后,我开始对每次重新发明轮子感到沮丧.我不断继续为每个项目开发定制解决方案,而是一直在寻找更通用的解决方案.我想知道是否有人知道满足以下要求的串行协议(或更好的实现):
速度不是太大的问题,我们愿意放弃一些速度,以满足其他一些需求.但是,我们希望尽量减少所需资源的数量.
我即将开始实施带有搭载ACK的滑动窗口协议,而且没有选择性重复,但是想到也许有人可以省去我的麻烦.有谁知道我可以利用的现有项目?或者也许是更好的策略?
更新
我认真考虑过TCP/IP实现,但我真的希望能有更轻量级的东西.TCP/IP的许多功能对于我正在尝试的内容来说都是过度的.我愿意(不情愿地)接受我想要的功能可能不包含在较轻的协议中.
更新2
感谢您关于CAN的提示.我过去看过它,将来可能会用它.我真的很喜欢这个库来处理确认,缓冲,重试等.我想我更需要网络/传输层而不是数据链路/物理层.
更新3
所以听起来这个领域的最新技术是:
如果您遇到这个问题,请随时发布更多答案.
在Objective-C中,我可以向具有类别的现有类添加方法,例如
@interface NSString (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end
Run Code Online (Sandbox Code Playgroud)
是否也可以使用协议来执行此操作,即如果存在NSString协议,则类似于:
@interface <NSString> (MyCategory)
- (BOOL) startsWith: (NSString*) prefix;
@end
Run Code Online (Sandbox Code Playgroud)
我想这样做,因为我对NSObject(该类)有几个扩展,只使用公共NSObject方法,我希望这些扩展也能用于实现协议的对象.
再举一个例子,如果我想编写一个方法logDescription,将对象的描述打印到日志中,该怎么办:
- (void) logDescription {
NSLog(@"%@", [self description]);
}
Run Code Online (Sandbox Code Playgroud)
我当然可以将此方法添加到NSObject,但是还有其他类不从NSObject继承,我也想要使用此方法,例如NSProxy.由于该方法仅使用协议的公共成员,因此最好将其添加到协议中.
编辑:Java 8现在在接口中使用"虚拟扩展方法":http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf.这正是我想在Objective-C中做的事情.我没有看到这个问题引起如此多的关注......
此致,Jochen
我想将它用于对象工厂:给定一个字符串,创建一个Class,如果这个Class支持一个协议(使用Create()方法),那么分配该类并调用Create.
似乎以前有更多的二进制协议,因为时间非常慢(拨号).我一直在看到一切都被HTTP和SOAP/REST/XML所取代.
为什么是这样?
二进制协议真的死了还是不太受欢迎?为什么他们会死或不受欢迎?
我正在使用该方法tableView:indexPathForCell
来实现自定义委托,该委托可以UITableViewCell
根据其UIWebView
内部的框架大小动态调整大小.问题是当我试图找出特定单元格的indexPath是什么时tableView:indexPathForCell
返回nil
:
- (void)trialSummaryTableViewCell:(TrialSummaryTableViewCell *)cell shouldAssignHeight:(CGFloat)newHeight {
NSIndexPath *indexPath = [tableV indexPathForCell:cell];
NSLog(@"tableV: %@\ncell: %@\nindexPath: %@", tableV, cell, indexPath); //<--
// ...
}
Run Code Online (Sandbox Code Playgroud)
这里,tableV
不返回nil
,单元格不返回nil
,但indexPath
返回nil
.
我究竟做错了什么?
编辑:我-(void)trialSummaryTableViewCell
从该tableView:cellForRowAtIndexPath:
方法调用
我有点困惑.protocol A : class { ... }
和之间的区别是什么protocol A{ ... }
,我们应该在swift中使用哪一个?
PS:我们写这样的时候出错了
protocol A{ ... }
weak var delegate: A
Run Code Online (Sandbox Code Playgroud)
错误:'weak'不能应用于非类类型
在OAuth协议中,服务使用者将要求用户在服务提供者域中授权请求令牌,然后从服务提供者交换请求令牌以获取访问令牌.
我想知道为什么OAuth被设计为在协议中有两个令牌.
为什么不在此过程中使用一个令牌呢?也就是说,用户将授权令牌,并且服务消费者将使用令牌从提供者检索信息.
protocols ×10
http ×2
objective-c ×2
binary ×1
browser ×1
c ×1
categories ×1
class ×1
client ×1
cocoa ×1
datasource ×1
delegates ×1
embedded ×1
firmware ×1
iphone ×1
oauth ×1
serial-port ×1
soap ×1
swift ×1
tcp ×1
token ×1
uitableview ×1
uiwebview ×1