小编l0g*_*g3r的帖子

UITableViewDelegate和UITableViewDatasource混淆

之前我理解该
Delegate模式仅用于调用事件delegate instance和获取控件(如size/font/etc ...).

Datasource模式仅用于从中获取数据datasource instance(如views/title/description/etc ...)

但看起来这是一个很好的错觉,在看了Apple之后UITableViewDelegate protocol我感到困惑,因为

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
Run Code Online (Sandbox Code Playgroud)

委托方法(但我认为它们是UITableViewDatasource方法)

这是来自Apple的脏代码,还是我遗漏了一些重要的东西,了解数据源和委托之间的区别?

编辑: 谢谢@DBD的好回答,这里更混乱

这是UITableViewDelegate方法,它返回View以进行绘制

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;

而且UITableViewDataSource中还有一个配置

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

而且,我们可以看到一个在UITableViewDataSource中返回View的方法

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

这里我们有问题为什么cellForRowAtIndexPath:viewForHeaderInSection:不在UITableViewDataSource中

objective-c uitableview uikit ios

7
推荐指数
1
解决办法
2087
查看次数

使用Class指针有多安全?

Objective-C使用Class有多安全?

- >我可以将Class safe存储在字典中而不是比较

info[@"class"] = [User class];
...
if ([User class] == info[@"class"]) {

}
Run Code Online (Sandbox Code Playgroud)

- >类指针可以改变吗?

- >它是否被隔离为永远Nil

cocoa class objective-c

5
推荐指数
1
解决办法
352
查看次数

带时区的 Python datetime.now()

我有一个浮动时区(例如 4.0)。
我想datetime用给定的时区构建。

我试过这个,

datetime.now(timezone)
Run Code Online (Sandbox Code Playgroud)

但它抛出

TypeError: tzinfo argument must be None or of a tzinfo subclass, not type 'float'
Run Code Online (Sandbox Code Playgroud)

所以我想知道我怎样才能tzinfo从浮动中制作?

python timezone datetime python-2.7

5
推荐指数
4
解决办法
1万
查看次数

PC寄存器上的ARM LDR指令

我在这里理解这个故事:

  • PC寄存器保存指向下一条指令的指针
  • LDR指令将第二个操作数的值加载到第一个操作数中(例如)
    LDR r0, [pc, 0x5678]
    相当于这个"C代码"
    r0 = *(pc + 0x5678)
    
    它是使用基本偏移量解引用的指针.

我的问题是:

我找到了这段代码

LDR PC, [PC,-4]

它被评论为猴子修补等.

我如何理解这段代码

pc = *(pc - 4)

在这种情况下,"pc"寄存器将取消引用前一条指令的地址,并将包含指令的"机器代码"(不是指令的地址),程序将跳转到该无效地址继续执行,可能我们将"分段故障".那么我缺少或不理解?



让我思考的是LDR指令中第二个操作数的括号.据我所知,x86架构上的括号已经取消引用指针,但我无法理解ARM架构中的含义.

mov r1, 0x5678
add r1, pc
mov r0, [r1]

这段代码相当于?

LDR r0, [pc, 0x5678]

assembly patch arm monkeypatching

3
推荐指数
1
解决办法
9979
查看次数

如何检测AppStore中是否安装了应用程序?

我的应用程序可以从Appstore安装,也可以通过Enterprise分发安装.
代码完全相同.
那么如果从Appstore安装Application,我怎么能以编程方式区别?

iphone objective-c app-store ios

2
推荐指数
1
解决办法
1355
查看次数

用C计算字符串的长度

我写了这个函数来计算NULL终止的char指针的长度

size_t strlen(char* char_ptr) {
    size_t len = 0;
    while (*(char_ptr++) != '\0') {
        ++len;
    }
    return len;
}

并且它工作正常,但与strlen()相比它非常慢,有没有其他方法可以做到这一点?

注意: <string.h>不可用

c pointers sizeof char strlen

-5
推荐指数
1
解决办法
2221
查看次数