小编Qui*_*lor的帖子

我如何迭代NSArray?

我正在寻找标准习语来迭代NSArray.我的代码需要适合OS X 10.4+.

iteration cocoa enumeration objective-c nsarray

446
推荐指数
6
解决办法
33万
查看次数

在Python类中支持等价("相等")的优雅方法

在编写自定义类时,通过==!=运算符允许等效通常很重要.在Python中,这可以通过分别实现__eq____ne__特殊方法来实现.我发现这样做的最简单方法是以下方法:

class Foo:
    def __init__(self, item):
        self.item = item

    def __eq__(self, other):
        if isinstance(other, self.__class__):
            return self.__dict__ == other.__dict__
        else:
            return False

    def __ne__(self, other):
        return not self.__eq__(other)
Run Code Online (Sandbox Code Playgroud)

你知道更优雅的做法吗?您是否知道使用上述比较方法的任何特殊缺点__dict__

注意:有点澄清 - 何时__eq____ne__未定义,您会发现此行为:

>>> a = Foo(1)
>>> b = Foo(1)
>>> a is b
False
>>> a == b
False
Run Code Online (Sandbox Code Playgroud)

也就是说,a == b评估是False因为它真的运行a is b,是对身份的测试(即" a与...相同的对象b"). …

python equality equivalence

384
推荐指数
6
解决办法
18万
查看次数

覆盖isEqual:和hash的最佳实践

你如何isEqual:在Objective-C中正确覆盖?"catch"似乎是如果两个对象相等(由isEqual:方法确定),它们必须具有相同的散列值.

" 可可基础指南"的 " 内省"部分确实有一个示例,说明如何为名为的类重写,如下所示:isEqual:MyWidget

- (BOOL)isEqual:(id)other {
    if (other == self)
        return YES;
    if (!other || ![other isKindOfClass:[self class]])
        return NO;
    return [self isEqualToWidget:other];
}

- (BOOL)isEqualToWidget:(MyWidget *)aWidget {
    if (self == aWidget)
        return YES;
    if (![(id)[self name] isEqual:[aWidget name]])
        return NO;
    if (![[self data] isEqualToData:[aWidget data]])
        return NO;
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

它检查指针相等性,然后检查类相等性,最后比较使用的对象isEqualToWidget:,它只检查namedata属性.该示例显示的是如何覆盖hash.

比方说,让我们假设有其他属性不会影响平等age.如果没有hash方法被覆盖,使得只有namedata影响哈希?如果是这样,你会怎么做?只需添加的哈希 …

equality objective-c

266
推荐指数
11
解决办法
9万
查看次数

视图控制器之间通信的最佳方式是什么?

作为Objective-c,cocoa和iPhone开发人员的新手,我强烈希望充分利用语言和框架.

我正在使用的资源之一是斯坦福大学的CS193P课程,他们已经留在网上了.它包括讲义,作业和示例代码,由于课程由Apple开发者提供,我绝对认为它是"从马的嘴里".

课程网站:http:
//www.stanford.edu/class/cs193p/cgi-bin/index.php

第08讲与构建基于UINavigationController的应用程序的任务相关,该应用程序将多个UIViewControllers推送到UINavigationController堆栈.这就是UINavigationController的工作原理.这是合乎逻辑的.但是,幻灯片中有一些关于UIViewControllers之间通信的严厉警告.

我将引用这个严肃的幻灯片:http:
//cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf

第16/51页:

如何不共享数据

  • 全局变量或单例
    • 这包括您的申请代表
  • 直接依赖使您的代码不再可重用
    • 而且更难以调试和测试

好.我很失望.不要盲目地将所有用于在viewcontroller之间进行通信的方法扔到app委托中,并引用app delegate方法中的viewcontroller实例.公平的'努力.

再进一步说,我们得到这张幻灯片告诉我们应该做些什么.

第18/51页:

数据流的最佳实践

  • 弄清楚究竟需要传达什么
  • 定义视图控制器的输入参数
  • 要进行备份层次结构的通信,请使用松散耦合
    • 为观察者定义通用接口(如委托)

然后,这张幻灯片后面会出现一个占位符幻灯片,然后讲师显然会使用UIImagePickerController的示例演示最佳实践.我希望这些视频可用!:(

好吧,所以...我担心我的objc-fu不是那么强大.我也对上面引用的最后一行感到困惑.我一直在谷歌搜索关于这一点,我发现似乎是一篇体面的文章谈论观察/通知技术的各种方法:http:
//cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html

方法#5甚至表示委托作为一种方法!除了....对象一次只能设置一个委托.所以当我有多个viewcontroller通信时,我该怎么办?

好的,那是设置团伙.我知道我可以通过引用在我的appdelegate中的多个viewcontroller实例轻松地在app委托中执行我的通信方法,但我想以正确的方式做这种事情.

请回答以下问题,帮助我"做正确的事":

  1. 当我试图在UINavigationController堆栈上推送一个新的viewcontroller时,应该这样做. 我的代码中哪个类/文件是正确的位置?
  2. 当我想在一个UIViewControllers中影响某个数据片段(iVar的值)时,当我在另一个 UIViewController中时,这样做的"正确"方法是什么?
  3. 假设我们在一个对象中一次只能设置一个委托,当讲师说"为观察者定义一个通用接口(如委托)"时,实现会是什么样子.如果可能的话,伪代码示例在这里会非常有用.

iphone cocoa-touch delegates objective-c key-value-observing

164
推荐指数
2
解决办法
4万
查看次数

Objective-C中是否有强类型集合?

我是Mac/iPhone编程和Objective-C的新手.在C#和Java中,我们有"泛型",集合类的成员只能是声明的类型.例如,在C#中

Dictionary<int, MyCustomObject>

只能包含整数和值为MyCustomObject类型的键.Objective-C中是否存在类似的机制?

generics collections objective-c strong-typing data-structures

138
推荐指数
6
解决办法
5万
查看次数

Objective-C:逐行读取文件

在Objective-C中处理大型文本文件的适当方法是什么?假设我需要分别读取每一行,并希望将每一行视为NSString.这样做最有效的方法是什么?

一种解决方案是使用NSString方法:

+ (id)stringWithContentsOfFile:(NSString *)path 
      encoding:(NSStringEncoding)enc 
      error:(NSError **)error 
Run Code Online (Sandbox Code Playgroud)

然后使用换行符分隔符拆分行,然后遍历数组中的元素.但是,这似乎效率很低.有没有简单的方法将文件视为一个流,枚举每一行,而不是一次只读取它?有点像Java的java.io.BufferedReader.

file-io objective-c enumerate nsstring nsstream

138
推荐指数
8
解决办法
15万
查看次数

iPhone上的NSString的AES加密

任何人都可以指出我正确的方向,能够加密一个字符串,返回另一个字符串与加密数据?(我一直在尝试使用AES256加密.)我想编写一个方法,它接受两个NSString实例,一个是要加密的消息,另一个是加密它的'密码' - 我怀疑我必须生成具有密码的加密密钥,如果密码随加密数据一起提供,则可以反转.然后,该方法应返回从加密数据创建的NSString.

我已经尝试过这篇文章的第一篇评论中详述的技术,但到目前为止我还没有运气.Apple的CryptoExercise肯定有一些东西,但我无法理解它......我已经看到很多对CCCrypt的引用,但是在我使用它的每种情况下它都失败了.

我还必须能够解密加密的字符串,但我希望它像kCCEncrypt/kCCDecrypt一样简单.

iphone encryption aes objective-c nsstring

123
推荐指数
4
解决办法
14万
查看次数

如何在Objective-C中创建和使用队列?

我想在Objective-C程序中使用队列数据结构.在C++中,我使用STL队列.Objective-C中的等效数据结构是什么?如何推送/弹出项目?

queue cocoa objective-c data-structures

107
推荐指数
6
解决办法
7万
查看次数

如何获取所有Subversion提交作者用户名的列表?

我正在寻找一种有效的方法来获取整个SVN存储库或给定资源路径的唯一提交作者列表.我没有能够专门为此找到一个SVN命令(并且不要指望一个),但我希望有一个更好的方法,我到目前为止在终端(在OS X上)尝试过:

svn log --quiet | grep "^r" | awk '{print $3}'

svn log --quiet --xml | grep author | sed -E "s:</?author>::g"
Run Code Online (Sandbox Code Playgroud)

这些中的任何一个都会为每行提供一个作者姓名,但它们都需要过滤掉相当多的额外信息.它们也不处理相同作者名称的重复,因此对于很少作者的许多提交,有大量冗余流过网络.通常我只想看到唯一的作者用户名.(实际上,有时候推断每个作者的提交次数可能很方便,但即使在这些情况下,如果聚合数据的发送也会更好.)

我通常使用仅限客户端访问,因此svnadmin命令不太有用,但如果有必要,我可能会在必要时或者更高效的情况下特别关注存储库管理员.我正在使用的存储库有成千上万的提交和许多活跃的用户,我不想给任何人带来不便.

svn metadata commit unique username

73
推荐指数
3
解决办法
4万
查看次数

Objective-C中的静态构造函数等效?

我是Objective C的新手,我无法确定语言中是否存在等效的静态构造函数,这是类中的静态方法,将在此类的第一个实例之前自动调用被实例化.或者我是否需要自己调用初始化代码?

谢谢

static initialization objective-c initializer

70
推荐指数
3
解决办法
2万
查看次数