小编eri*_*ell的帖子

同时CCActions Cocos2d

是否可以同时在精灵上运行多个ccactions?例如,如果我有一个CCFadeIn,一个CCScaleTo和一个CCRotateBy,都具有相同的持续时间,我可以同时在精灵上运行所有三个吗?我发现的唯一远程关闭的东西是CCSequence,这不是我想要的.谢谢!

cocos2d-iphone ios

10
推荐指数
2
解决办法
6064
查看次数

使用Instruments分析内存泄漏 - iPhone 4和iOS 5 Simulator之间存在巨大差异

当使用Instruments分析我的应用程序(寻找内存泄漏)时,iOS 5 iPhone模拟器的结果与我运行iOS 5的iPhone 4的结果非常不同.第一张图显示了使用真实设备进行分析的结果,第二个是模拟器:

真实设备:

真实设备


iOS 5模拟器:

模拟器

在这两种情况下,此配置文件都被应用到应用程序中的同一点:在rootViewController的视图生命周期中完成viewDidLoad.我已经在两个中等待总分配内存稳定输出.正如您在设备图中看到的那样,在00:10左右会出现一些极端波动,这些波动在模拟器中不存在.在真实设备上,总分配内存在00:08左右从1MB跳到3.5 MB然后再回到1.5 MB,最后跳到4.74,稳定下来.为模拟器分配的内存更加线性,它稳定地快速攀升到2.35 MB左右,稳定下来.

需要注意的另一件事是设备上存在2.25 MB的已分配内存,但不是来自malloc的模拟器和来自CFNumber的700+ KB.由于我使用仪器和分析相对较新,我不确定这是否正常.一个快速的谷歌搜索没有任何确定性.2.25 MB和700 KB以上弥补了内存分配的差异.为了平衡事物,有更多的malloc条目,模拟器测试中存在不同的内存量,在设备测试中不存在.

此外,我发现当第二个UIViewController被推送到UINavigationController堆栈时,分配的内存在真实设备上跳转到大约8.5-9 MB,但在模拟器上只有大约4.5到4.5 MB的顶部.

我知道可以预期该设备的运行方式与模拟器有很大不同,但是内存分配不应该非常相似,因为在两个设备上运行相同的代码?我会理解这是否是性能分析,但对于内存分配,似乎数字应该非常相似.任何人都可以了解这是否正常?

iphone memory-management instruments ios

9
推荐指数
1
解决办法
3120
查看次数

收集在被枚举时发生变异 - 存档数据并使用NSCoder写入文件

在我的应用程序中,我定期将一组动态数据写入文件.数据对象每秒都会更新一次.偶尔我会在我的encodeWithCoder:方法中的一行上得到"Collection is mutated in mutated"异常.每个对象的编码如下:

[aCoder encodeObject:self.speeds forKey:@"speeds"];
Run Code Online (Sandbox Code Playgroud)

self.speeds是一个NSMutableArray.我假设问题是数据在编码时正在更新.我尝试在编码保存块中使用@synchronize,我也尝试将属性设置为原子而不是非原子,但都没有工作.节约发生在后台.有关如何在更新时在后台保存此数据的任何想法?我想制作副本然后保存副本会起作用,但不会出现同样的问题吗?谢谢!


编辑1:

应用程序中的想法是我打开一个地图视图,它定期更新包含数据对象数组的单例类,每个数据对象都是用户的地图信息.在每个数据对象,用户的位置,速度,高度,距离等每三次外景经理更新用户的位置,我更新当前数据对象(这是刚刚创建跟踪此脱扣的"活动"的数据对象使用新信息只能有一个"实时"数据对象.

我想每隔x分钟将整个单例写入一个文件,但有时写入和更新同时发生,我得到这个错误(或者至少这是我认为导致这种崩溃的原因).这是我的代码或我的设计模式的问题吗?


这是我的自定义类中的编码方法:

- (void)encodeWithCoder:(NSCoder*)aCoder {
    @synchronized([SingletonDataController sharedSingleton]) {
        [aCoder encodeObject:[[lineLats copy] autorelease] forKey:@"lineLats"];
        [aCoder encodeObject:[[lineLongs copy] autorelease] forKey:@"lineLongs"];
        [aCoder encodeObject:[[horizontalAccuracies copy] autorelease] forKey:@"horAcc"];
        [aCoder encodeObject:[[verticalAccuracies copy] autorelease] forKey:@"vertAcc"];
        [aCoder encodeObject:[[speeds copy] autorelease] forKey:@"speeds"];
        [aCoder encodeObject:[[overlayColors copy] autorelease] forKey:@"colors"];
        [aCoder encodeObject:[[annotationLats copy] autorelease] forKey:@"annLats"];
        [aCoder encodeObject:[[annotationLongs copy] autorelease] forKey:@"annLongs"];
        [aCoder encodeObject:[[locationManagerStartDate copy] autorelease] forKey:@"startDate"];
        [aCoder encodeObject:[[locationManagerStartDateString copy] autorelease] forKey:@"locStartDateString"];
        [aCoder encodeObject:[[mapTitleString copy] autorelease] forKey:@"title"]; …
Run Code Online (Sandbox Code Playgroud)

serialization asynchronous objective-c nscoder ios

8
推荐指数
1
解决办法
2008
查看次数

奇怪的Xcode分析结果

当我在Xcode中分析我的项目时,我得到了一些奇怪的错误.所有这些代码都是单个方法的一部分,该方法创建可用于制作的数组MKAnnotations.对不起,如果这是代码的泛滥 - 我尽力评论出不相关的部分.除了片段之外,我还在整个方法中包含了整个方法.谢谢!

- (void)addLines {
    /*

    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];

    // Create region and span variables
    MKCoordinateSpan span;
    MKCoordinateRegion region;

    NSArray* arrayOuter = [defaults objectForKey:@"mapSaveDataKey"];

    NSData* data = [arrayOuter objectAtIndex:[[defaults objectForKey:@"currentMap"] intValue]];

    NSArray* arrayOne = [NSKeyedUnarchiver unarchiveObjectWithData:data];

    if (arrayOne.count == 0)
        [self returns:nil];

    */

    NSArray* overlayLat = [arrayOne objectAtIndex:1];
    double lats[overlayLat.count];

    NSArray* overlayLong = [arrayOne objectAtIndex:2];
    double longs[overlayLong.count];

    NSArray* annotationLat = [arrayOne objectAtIndex:8];
    double annotationLats[annotationLat.count];

    NSArray* annotationLong = [arrayOne objectAtIndex:9];
    double annotationsLongs[annotationLong.count];

    /*

    CLLocationCoordinate2D startLocation = …
Run Code Online (Sandbox Code Playgroud)

xcode static-analysis analyzer clang-static-analyzer ios

7
推荐指数
1
解决办法
2209
查看次数

Objective-C中的自动释放池 - 释放主AutoreleasePool?

根据我的理解,当一个对象被发送一条autorelease消息时,如果没有自动释放池存在main.m,那么该对象将被置于其中main.m.假设这是正确的,我有几个问题:

1)所有自动释放的对象是否都会留在该池中,直到应用程序终止?

2)如果1为真,那么创建一个没有本地自动释放池的自动释放对象(因此将该对象放入main.m池中)是否会将该对象保留在内存中,直到应用程序终止或收到内存警告为止?

3)main.m除了应用程序收到内存警告或应用程序终止之外,何时自动释放池耗尽?

例如,在cellForRowAtIndexPath委托方法中,例如:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Foobar"];
if (cell == nil) {
    // No cell to reuse => create a new one
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"Foobar"] autorelease];

    // lots of custom stuff
}

return cell;
Run Code Online (Sandbox Code Playgroud)

细胞何时实际释放?它们必须是自动释放的,因为你不能在它们返回之前释放它们,并且之后你不能释放它们,因为它们超出了范围.根据我目前的理解,细胞被放置在最顶层的自动释放池中,并在该池被排空/释放时释放.在这种情况下,这将是应用程序中唯一的自动释放池; 那个人main.

4)这个问题,即使我完成了那些单元格并且视图控制器已经被释放,单元格仍留在内存中,是吗?如果不是这种情况,有人可以解释一下这种情况下的内存管理是如何工作的吗?谢谢!

注意:我查看了Apple的文档,但它主要讨论何时使用您自己的本地自动释放池,但没有太多关于它们实际运行的方式.

memory-management objective-c autorelease nsautoreleasepool ios

6
推荐指数
2
解决办法
2820
查看次数

强制UITableView为所有单元格调用cellForRowAtIndexPath :.

我在使用UITableView的reloadData方法时遇到了一些麻烦.我发现如果添加或删除了新的单元格,它只调用cellForRowAtIndexPath.

示例:我有五个单元格,每个单元格包含五个字符串.如果我添加一个新的单元格并调用reloadData,表格会更新,我会看到它.然而,如果我进入五个单元格中的一个,添加一个新字符串,然后返回并调用reloadData,则不会调用任何表视图的委托方法.

我的问题:是否可以强制表视图完全重载所有可见单元格中的数据?

uitableview reloaddata ios

6
推荐指数
1
解决办法
2万
查看次数

当MKMapView showsUserLocation == YES时隐藏MKUserLocation

设置mapView.showsUserLocation为true后,是否可以在不显示MKUserLocation气泡的情况下接收位置更新?返回nil mapView:viewForAnnotation:只显示气泡,并返回任何其他类型的注释显示注释,我不想要.

location mkmapview mkannotation ios

6
推荐指数
1
解决办法
4053
查看次数

mapViewDidFinishLoadingMap:调用得太早了

我的问题很简单:我正在等待获取MKMapView的截图,我只想在加载地图后才这样做.不幸的是,实际加载地图之前,几乎总是调用此委托方法.如果我很幸运的话,我只会得到一个网格,或者几个加载的瓷砖.有没有办法做我需要做的事情?或者我在MKMapViewDelegate协议中遗漏了什么?

谢谢!

screenshot objective-c mkmapview ios mkmapviewdelegate

6
推荐指数
1
解决办法
803
查看次数

是否有可能让 iOS 模拟器的性能更像真正的 iPhone?

Apple 的 iOS 模拟器很棒 - 我一直使用它,因为它比在真实设备上运行容易得多。不过,它有一些缺点,其中之一就是它太强大了。因为它可以访问计算机的资源,所以我经常发现在 iOS 模拟器上运行良好(顺利)的代码并不总是在真实设备上顺利运行,在本例中是我的 iPhone 4。

这个问题的标题已经说明了一切,但我还要再说一遍:是否有可能让 iOS 模拟器像真正的 iOS 设备一样运行?

iphone ipad ios ios-simulator

5
推荐指数
1
解决办法
4940
查看次数

Google地图iOS SDK在销毁GMSMapView时偶尔会崩溃

在我的应用程序中,我偶尔会遇到一个崩溃,当GMSMapView它从一个视图中导航时(从我的弹出UINavigationController).它在线程10崩溃了,这是崩溃信息:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000004
Crashed Thread:  10
Run Code Online (Sandbox Code Playgroud)

并且该线程的堆栈跟踪:

Thread 10 name:  Dispatch queue: URLConnection
Thread 10 Crashed:
0   libsystem_c.dylib               0x39ef897c OSAtomicAdd32 + 0
1   CoreData                        0x31bf3de4 _PFfastQueueRelease + 24
2   CoreData                        0x31bd3ee8 -[NSManagedObject release] + 224
3   CoreFoundation                  0x31d2d30c CFRelease + 96
4   CoreFoundation                  0x31d47e96 -[__NSDictionaryM dealloc] + 130
5   Trail Tracker GPS               0x00206076 -[GMSTileDataCache .cxx_destruct] + 162
6   libobjc.A.dylib                 0x39a90f3a object_cxxDestructFromClass(objc_object*, objc_class*) + 54
7   libobjc.A.dylib                 0x39a8e0ce objc_destructInstance + …
Run Code Online (Sandbox Code Playgroud)

objective-c segmentation-fault google-maps-sdk-ios gmsmapview

5
推荐指数
1
解决办法
831
查看次数