NSAutoreleasePool在子函数的正确用法

之前提供了几道iPhone开发的题目,在设计题目的时候特意考察了这一个题目。很多人都知道有NSAutoreleasePool的大概用法。考察的结果很出乎意外。基本所有的面试者都不知道怎样编写一个消耗大量资源的使用NSAutoReleasePool。在IOS的开发文档中。有这么一段使用的示例。

– (id)findMatchingObject:(id)anObject {
id match = nil;
while (match == nil) {
NSAutoreleasePool *subPool = [[NSAutoreleasePool alloc] init];
/* Do a search that creates a lot of temporary objects. */
match = [self expensiveSearchForObject:anObject];
if (match != nil) {
[match retain]; /* Keep match around. */
}
[subPool drain];
}
return [match autorelease]; /* Let match go and return it. */
}

在使用了嵌套的子内存池之后,返回值Match保留一份, 将match加入父内存池中。

Share
Posted in apps, iphone, programmer at March 17th, 2012. No Comments.

使用Xcode4.2发布支持armv6平台的应用

苹果对xcode进行了升级到4.2 ,接着又对Application Loader的App应用自动validate做了升级,由于xcode4.2默认使用的架构是armv7,如果应用需要支持4.3以下的系统, 那么发布的时候苹果就会一个蛋疼的错误。

 

iPhone / iPod touch : application executable is missing a required architecture. Atleast one of the following architectures must be present: armv6

 

解决的办法当然是让应用支持armv6。直接在Architectures中添加 armv6。正常情况下就可以解决这个问题了。没有必要做其它工作的。

如果使用的是Three20的框架。那么正常情况下会报一大堆的编译错误。链接错误。因为这个时候Thre20的编译使用的架构仍然是armv7,所以需要在xcode的左侧侧边栏一一打开添加armv6架构。

最近上传的时候苹果还会拼命告诉你Icon图标它找不到,即使你设置了icon.png的所有的配置文件,但是它仍然会非常固执的告诉你真的没有。之前的上传是正常的。所以我把icon压缩的选项关闭的了。这样才能够成功上传。



Share
Posted in apps, bookcamp, iphone at February 4th, 2012. 1 Comment.

NSString的字符串反转

这个是一个蛋疼的题目,当然蛋疼,当我给自己做了一个限定,正常在Obj-c中的操作都是NSString对象,如果不使用内置函数,那么要做算法,操作就是对象,正常人类的做法,当然应该使用一个NSMutableNString,用append去写。这样的话,你从前学的在C里面的算法一个屁都用不上,也可以交换两个前后两端的字符串,我心想都是一个但是其实那个索引的操作是不透明的,在一个正常的考试中,你也不会能够写一个东西去验证这个到底那个索引操作有多快。一个可控的方法,当然是还是用纯C来写。

        NSString *test = "this is a test";
        const char *p = [test cStringUsingEncoding:NSUTF8StringEncoding];
        int len = strlen(test);
        char *s = (void*)malloc(len+1);
        memset(s, 0×00, sizeof(len+1));
        strcpy(s, test);
        for(char *end = s + strlen(s) – 1; ; end > s ; –end , ++s){
             *s ^= *end;
                *end ^= *s;
                *s ^= *end;
       }
       NSString *result = [NSString stringWithUTF8String:s];
       free(s);

stackoverflow上的有两端交互的方法。

Share
Posted in Uncategorized at January 9th, 2012. No Comments.

Three20支持的资源地址

在Three20中支持两种短地址访问的方式。

1、bundle:// ———— 访问Bundle的主要方式。一般的话资源文件都放置在main bundle下面。所以可以使用bundle://demo.jpeg访问图片。如果是在子bundle中。那么可以用 bundle://three20.bundle/demo.jpeg的方式访问。

2、document:// ———— 用户文件夹。

 

举一个例子,TTThumbView.thumbURL一般情况下传递一个http://图片地址。当然对于也可以把这些资源地址当成网络地址访问。所以传递一个document://demo.jgeg的地址也是没有问题。

Share
Posted in Uncategorized at December 29th, 2011. 1 Comment.