shitou's blog 

  • Home
  • About
  • Feed
  • 十人族
  • MIX BOY
  • 塌客

Category "iPhone"

09
Oct

MacRuby

MacRuby就是用ruby的方式来写Mac上的app, 其实就是ruby和objective-c的转换,

这是官方的一篇教程.

Developing Cocoa Application Using MacRuby

 

这里还有一篇简单的中文说明,PDF的, 戳我

 

ps: 越来越懒了,哎.., 这篇日志纯属为了占位,不然十月份就这样过去了,最近垃圾的英文评论非常猖狂,设了验证码完全没用,每天都要清理,么的,不行就ban ip了

 

Tags:

2009-10-09 15:21:15, 721 reviews, comment

send to mailbox

Your email:

09
Sep

my macbook

我的MacBook, show一下(额..,那啥,我一向很低调的~~)

 

http://www.ccok.me/photo/image/45/medium/Picture_1.png

仓木麻衣

 

http://www.ccok.me/photo/image/46/medium/Picture_2.png

冰河世纪3

 

http://www.ccok.me/photo/image/47/medium/Picture_3.png

snow leopard壁纸

 

Tags: Mac

2009-09-09 22:23:44, 873 reviews, comment

send to mailbox

Your email:

02
Jun

Autorelease in a Loop

Objective-C中的autorelease pool可以帮我们省去一些手工释放变量的麻烦,但是在一些情况下还是会遇到问题的,比如在一个大的Loop中,如:
for (int i = 0; i < someLargeNumber; i++) {
  NSString *string = ...;
  string = [string lowercaseString];
  string = [string stringByAppendingString:...];
  NSLog(@“%@”, string);
}

因为autorelease pool是延迟才会释放变量,即释放内存,所以当一个Loop比较大,而且Loop中的autorelease变量较多时仍然会遇到内存问题的。
iPhone的应用程序本身就是放在一个autorelease pool中运行的(main.m文件),但是遇到上面的情况时,仍然需要自己手工创建autorelease pool的,如:
for (int i = 0; i < someLargeNumber; i++) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];


  NSString *string = ...;
  string = [string lowercaseString];
  string = [string stringByAppendingString:...];
  NSLog(@“%@”, string);


  [pool release];
}

如果有变量需要从Loop中返回时可以这样:
NSString *stringToReturn = nil;

for (int i = 0; i < someLargeNumber; i++) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  NSString *string = ...;
  string = [string stringByAppendingString:...];
  if ([string someCondition]) {
    stringToReturn = [string retain];
  }


  [pool release];
  if (stringToReturn) break;
}
return [stringToReturn autorelease];

在能使用alloc/init的地方尽量使用,然后手工进行release
Tags: objective-c

2009-06-02 15:21:21, 1119 reviews, comment

send to mailbox

Your email:

14
May

copy和mutableCopy

指针,内存管理,都是学习objc所要面对的新东西,iPhone基础开发教程看到第8章了,8.7搜索栏实现的第一个方法就把我搞爽了,在 ruby, php中一个简单的变量赋值为什么在这里就要搞的这么雄伟壮观呢,没办法,看官方doc, 写了个小例子有助于理解,下面的例子反映了objc的一些基本用法(同php, ruby相比), 也是以后需要注意的,这里只做简单解释,如果下面的例子都让你发晕,你还是先看更基础的objc的书吧,推荐learn objective-c on mac

#import "Foundation/Foundation.h"

int main(int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

 

//a1是用原始方法初始化创建的,因此a1的内存管理由你负责,下面的变量也是如此, 基本上所有通过init之类方法初始化的变量都需要 自己维护变量的引用计数器,用完就要release

NSArray *a1 = [[NSArray alloc] initWithObjects:@"NSArray a1", nil];

 

//只是把指针赋予a2, 该指针的类型是NSArray, 现在a1和a2所指向的是同一块内存单元,就是指向的数值一样,只是引用不一样,就相当于一个文件你创建了两个快捷方式(或者是linux上的soft link), 因此你修改任何一个值等于同时修改另一个的值

NSArray *a2 = a1;

 

//这里输出结果一样
NSLog([a1 description]);
NSLog([a2 description]);

 
NSMutableArray *a3 = [[NSMutableArray alloc] initWithObjects:@"NSMutableArray: a3", nil];
NSMutableArray *a4 = a3;
[a3 addObject:@"element2"];

 

//输出结果一样
NSLog([a3 description]);
NSLog([a4 description]);

 

//这里才是像php, ruby中的赋值一样,把a3赋予a5, 不同的指针不同的内存地址引用,完全copy
NSMutableArray *a5 = [a3 copy];
[a3 addObject:@"element3"];

 

//只有a5中有element3
NSLog([a3 description]);
NSLog([a5 description]);


NSMutableArray *a6 = [[NSMutableArray alloc] init];

 

//把a3中的元素放入a6, 这里只是数据的放入,不会保留mutable和immutable信息
[a6 addObjectsFromArray:a3];

 

//注意下面的autorelease, 即把含有a, b的数组加入a6中后,自行释放,就是交给程序去管理了
[a6 addObject:[[[NSArray alloc] initWithObjects:@"a", @"b", nil] autorelease]];
NSLog([a6 description]);
NSLog([[a6 objectAtIndex:[a6 count] - 1] description]);

 

 //创建a6的可变拷贝赋给a7, 只有有mutable, immutable区分的对象才有mutableCopy方法, 即如果这个地方你用的是copy即使a6是mutable, a7也是immutable
NSMutableArray *a7 = [a6 mutableCopy];
[a6 insertObject:@"element4" atIndex:3];
NSLog([a6 description]);

[a7 insertObject:@"first" atIndex:0];
//this will be error, because the last element is not mutable array
//[[a7 objectAtIndex:[a7 count] - 1] addObject:@"c"];
//this will create the mutable copy

 

//上面注释掉的操作是会出错的,因为a, b数组是immutable, 下面就是创建它的mutable拷贝, 也就是iPhone基础开发教程 8.7开始那个函数实际要做的,只是它是递归调用的
NSMutableArray *ma = [[a6 objectAtIndex:[a6 count] -1] mutableCopy];
[a7 replaceObjectAtIndex:[a7 count] - 1 withObject:ma];

 

//现在就可以操作了
[[a7 objectAtIndex:[a7 count] - 1] addObject:@"c"];

NSLog([a7 description]);


 
//上面的变量哪些要手工release, 哪些由release pool管理,就不多说了
[a1 release];
[a3 release];
[a5 release];
[a6 release];
[a7 release];
[ma release];
[pool release];
return 0;
}

Tags: objective-c

2009-05-14 14:40:47, 1581 reviews, comment

send to mailbox

Your email:

09
May

iPhone: EXC_BAD_ACCESS

今天在做实验时GDB 抛出了EXC_BAD_ACCESS异常,模拟器退出,google得到了结果,内存管理的问题,之前一直是用php, ruby,从没关心过内存的问题,现在真是头疼,需要自己维护变量,不过这样的确可以更深入的了解程序内部的流程,php,ruby把底层的东西都给你隐藏起来了,虽然之前看过不少objc内存管理的内容了,不过熟练的话需要一定实践了,下面是要注意的几点:

 

Finding EXC_BAD_ACCESS bugs in a Cocoa project

EXC_BAD_ACCESS signal received on iPhone App deployment to device

 

 

Tags: iPhoneException

2009-05-09 13:27:23, 1413 reviews, comment

send to mailbox

Your email:

06
May

CSS3

真不知道CSS3和HTML5能普及是什么时候的事了, 看到CSS3和HTML5的强大,真是感叹现在web的复杂,safari目前对CSS3的支持是最好的,在iphone上开发web应用的可以尝鲜了,下面有篇不错的介绍CSS3的文章可以参考下,

 

摸我 ,  再摸我

 

Tags: Safari,Mac

2009-05-06 14:55:15, 746 reviews, comment

send to mailbox

Your email:

上一页 1 2 3 下一页

Tags

json Impactjs Canvas fun gen_server superfly PS3 Webgame HTML5 jquery SSH tenerer MooseFS gearman-ruby Gearman MongoDB MochiChat TCP U-ka saegusa IN db command Mai Kuraki Norah Jones log iPhoneException ACG Mac Safari objective-c CouchDB LVS AJAX debian 推荐 AMQP google mail bug gettext Erlang 北京 iptables 架构 tips mysql backup function 我看 postfix 监控 SEO cache Etag memcache thread 进程 线程 无锡 yield file column mixboy xml rss gems ruby shitou shell lighttpd 安全 csrf 公司 nginx linux 模块 apache webserver 朋友 大学 生活 尼古拉斯凯奇 movie 文件同步 笑笑 歌词 auto complete plugin rails music ubuntu blog

Category

  • HTML5[3]
  • iPhone[17]
  • Erlang[11]
  • google[13]
  • 生活[45]
  • 音乐[13]
  • 电影[11]
  • linux[29]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[9]
  • ruby[20]
  • ruby on rails[28]
  • 开源[4]

Episode

  • MongoDB
  • MochiChat
  • iPhoneException
  • shell
  • thread
  • memcache


Popular Posts

  • 准备开始学习Erlang了(恶狼, 二郎..)
  • Ruby遍历MemCached的key
  • 服务器监控小脚本
  • MySQL Innodb备份
  • [转载]5个有用的ruby gems

Recommended Posts

  • Tri-survive - HTML5 Game
  • Cut the rope - HTML5版
  • json_formatter
  • 在gen_server中spawn新的进程
  • Superfly - Wildflowers
  • 继续凸墙 for Mac OS
  • MongoDB Beijing 2011
  • MongoDB删除map_reduce生成的tmp collection
  • Mai Kuraki - Future Kiss
  • Erlang OOP
  • 用SSH tunnel凸墙
  • Google的语法高亮工具包
  • 大量数据的批量操作
  • 再次被和谐-_-
  • 十人族: 上线了

Friends' blogs

  • levy
  • sphance
  • andreas
  • yangkunlun
  • {:dev=>:wxianfeng}
  • bheye
  • joeydarko

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 316257
  • 今天访问: 52
  • 日志: 213
  • 评论: 4967
  • 音乐: 9
  • 用户: 1758


少年,不点下广告吗!

 

all by shitou

blog comments powered by Disqus

close