2011年8月8日 星期一

真機調試 Received memory warning. Level= …

OSMemoryNotification.h

typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;



How the levels are triggered is not documented. SpringBoard is configured to do the following in each memory level:

1.Warning (not-normal) — Relaunch, or delay auto relaunch of nonessential background apps e.g. Mail.
2.Urgent — Quit all background apps, e.g. Safari and iPod.
3.Critical and beyond — The kernel will take over, probably killing SpringBoard or even reboot.
4.Killing the active app (jetsam) is not handled by SpringBoard, but launchd.


參考文章

在cocos2d呢
1 .Received memory warning. Level= 1
會觸發 [[CCDirector sharedDirector] purgeCachedData];

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[CCDirector sharedDirector] purgeCachedData];
}


此時會把目前沒用到的 材質釋放掉~~
~
理論上ios系統會把不必要的背景程式關掉~


遇到這個情形呢~ 先查查leak吧
如果都沒有~就就就就…砍需求or改需求or改code~~~
減少在同一畫面下的內存使用量了


2 .Received memory warning. Level= 2


目前遇到的都crash 掉了~

還是乖乖查leak …





其他的還沒遇過~哈


2011年7月31日 星期日

內存管理筆記

retainCount 是 objective-c  內存管理的唯一依據.  release 後自動  retainCount 減 1 ,  到 0 時  對象 的dealloc 會被觸發。
     所以永遠不該呼叫 對象的 dealloc 方法

 
1,alloc, allocWithZone,new(帶初始化)
   
為對象分配內存,retainCount為“1”,並返回此實例
2,release
   
retainCount 減“1”,減到“0”時調用此對象的dealloc方法
3,retain
   
retainCount 加“1”
4,copy,mutableCopy
   
複製一個實例,retainCount數為“1”,返回此實例。所得到的對像是與其它上下文無關的,獨立的對象(乾淨對象)。
5,autorelease
   
在當前上下​​文的AutoreleasePool棧頂的autoreleasePool實例添加此對象,由於它的引入使Objective-C(非GC管理環境)由全手動內存管理上升到半自動化。


詳細參考文章:參考文章

2011年7月7日 星期四

CCLayer CCFadeOut unrecognized selector sent to instance !!~~~~

//目前使用的是 cocos2d 2.0 rc2 版
//
//在CCLayer 淡出效果時
[self runAction:[CCFadeOut actionWithDuration:0.8f]];
//會出現
[classXX setOpacity:]: unrecognized selector sent to instance 0xXXXXXXX !!

似呼有被回呼某 selector
所以必順實做 setOpacity 讓他變更

// Set the opacity of all of our children that support it
-(void) setOpacity: (GLubyte) opacity
{
for( CCNode *node in [self children] )
{
if( [node conformsToProtocol:@protocol( CCRGBAProtocol)] )
{
[(id) node setOpacity: opacity];
}
}
}

2011年7月5日 星期二

限定只有某CCLayer 觸發 touch

網路上片斷 +試驗
原理還沒詳細研究~先記錄囉~

//================================================================
-(void) registerWithTouchDispatcher
{
[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:INT_MIN+1 swallowsTouches:YES];
}
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{

return YES;
}

2011年6月30日 星期四

NSMutableArray sort NSString , NSNumber

//內容都是nsstring的
//


NSLog(@"**************************************************");
//內容都是nsstring的
NSMutableArray *arrData = [NSMutableArray new];
[arrData addObject:@"A4"];
[arrData addObject:@"A2"];
[arrData addObject:@"a2"];
[arrData addObject:@"A2"];
[arrData addObject:@"A1"];

NSLog(@"------------- original:");
for (id obj in arrData) NSLog(@"arrData:%@", obj);

NSLog(@"------------- sorted:");
NSArray * sortedData =
[arrData sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
for (id obj in sortedData) NSLog(@"sortedData:%@", obj);
NSLog(@"------------- sorted:");
NSArray * sortedData2 =
[arrData sortedArrayUsingSelector:@selector(localizedCompare:)];
for (id obj in sortedData2) NSLog(@"sortedData2:%@", obj);

output:
2011-07-02 11:38:29.906 testCode[449:207] **************************************************
2011-07-02 11:38:29.907 testCode[449:207] ------------- original:
2011-07-02 11:38:29.908 testCode[449:207] arrData:A4
2011-07-02 11:38:29.908 testCode[449:207] arrData:A2
2011-07-02 11:38:29.908 testCode[449:207] arrData:a2
2011-07-02 11:38:29.909 testCode[449:207] arrData:A2
2011-07-02 11:38:29.909 testCode[449:207] arrData:A1
2011-07-02 11:38:29.910 testCode[449:207] ------------- sorted:
2011-07-02 11:38:29.910 testCode[449:207] sortedData:A1
2011-07-02 11:38:29.911 testCode[449:207] sortedData:A2
2011-07-02 11:38:29.911 testCode[449:207] sortedData:a2
2011-07-02 11:38:29.911 testCode[449:207] sortedData:A2
2011-07-02 11:38:29.911 testCode[449:207] sortedData:A4
2011-07-02 11:38:29.912 testCode[449:207] ------------- sorted:
2011-07-02 11:38:29.914 testCode[449:207] sortedData2:A1
2011-07-02 11:38:29.914 testCode[449:207] sortedData2:a2
2011-07-02 11:38:29.915 testCode[449:207] sortedData2:A2
2011-07-02 11:38:29.915 testCode[449:207] sortedData2:A2
2011-07-02 11:38:29.915 testCode[449:207] sortedData2:A4



//內容都是NSNumber的

NSLog(@"**************************************************");
//內容都是NSNumber的
NSMutableArray *arrNum = [NSMutableArray new];
[arrNum addObject:[[NSNumber alloc] initWithInt:5]];
[arrNum addObject:[[NSNumber alloc] initWithInt:1]];
[arrNum addObject:[[NSNumber alloc] initWithInt:3]];
[arrNum addObject:[[NSNumber alloc] initWithInt:2]];
NSLog(@"------------- original:");
for (id obj in arrNum) NSLog(@"arrNum:%@", obj);
NSLog(@"------------- sorted:");
NSArray * sortedNum = [arrNum sortedArrayUsingSelector:@selector(compare:)];
for (id obj in sortedNum) NSLog(@"sortedNum:%@", obj);



output:
2011-07-02 11:38:29.915 testCode[449:207] **************************************************
2011-07-02 11:38:29.929 testCode[449:207] ------------- original:
2011-07-02 11:38:29.929 testCode[449:207] arrNum:5
2011-07-02 11:38:29.930 testCode[449:207] arrNum:1
2011-07-02 11:38:29.930 testCode[449:207] arrNum:3
2011-07-02 11:38:29.930 testCode[449:207] arrNum:2
2011-07-02 11:38:29.931 testCode[449:207] ------------- sorted:
2011-07-02 11:38:29.931 testCode[449:207] sortedNum:1
2011-07-02 11:38:29.931 testCode[449:207] sortedNum:2
2011-07-02 11:38:29.931 testCode[449:207] sortedNum:3
2011-07-02 11:38:29.932 testCode[449:207] sortedNum:5

Cocos2d: 取得 CCSprite 寬跟高

 //取得 CCSprite 寬跟高

CCSprite *sp = [CCSprite spriteWithFile:@"Icon.png"];
NSLog(@"sp width:%f,heigt,:%f",sp.contentSize.width , sp.contentSize.height);

2011年6月26日 星期日

用 NSMutableArray 記錄與取得 int ,CGPoint

Objective-C 真是一個麻煩的語言
//int 記錄與取得
myArray = [NSMutableArray array];
[myArray addObject:[NSNumber numberWithInteger:1234]];
//..
int theNumber = [[myArray objectAtIndex:0] integerValue];
//CGPoint記錄與取得
NSArray *points = [NSArray arrayWithObjects:
  [NSValue valueWithCGPoint:CGPointMake(5.5, 6.6)],
  [NSValue valueWithCGPoint:CGPointMake(7.7, 8.8)], nil];
NSValue *val = [points objectAtIndex:0];
CGPoint p = [val CGPointValue];