之前提供了几道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加入父内存池中。
Posted in
apps,
iphone,
programmer at March 17th, 2012.
No Comments.
苹果对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压缩的选项关闭的了。这样才能够成功上传。
Posted in
apps,
bookcamp,
iphone at February 4th, 2012.
1 Comment.
这个是一个蛋疼的题目,当然蛋疼,当我给自己做了一个限定,正常在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上的有两端交互的方法。
Posted in
Uncategorized at January 9th, 2012.
No Comments.
在Three20中支持两种短地址访问的方式。
1、bundle:// ———— 访问Bundle的主要方式。一般的话资源文件都放置在main bundle下面。所以可以使用bundle://demo.jpeg访问图片。如果是在子bundle中。那么可以用 bundle://three20.bundle/demo.jpeg的方式访问。
2、document:// ———— 用户文件夹。
举一个例子,TTThumbView.thumbURL一般情况下传递一个http://图片地址。当然对于也可以把这些资源地址当成网络地址访问。所以传递一个document://demo.jgeg的地址也是没有问题。
Posted in
Uncategorized at December 29th, 2011.
1 Comment.