标签: memory-management

Objective-C:为什么我的保留计数不是1?

我有这个非常简单的程序,我只是创建一个对象并查看保留计数.

#import <Foundation/Foundation.h>
#import "GeometryCalculator.h"

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

     GeometryCalculator *calculator = [[GeometryCalculator alloc] init];
     NSLog(@"Counter: %d", [calculator retainCount]);

    [calculator release];

        [pool drain];
        return 0;  
}
Run Code Online (Sandbox Code Playgroud)

我希望我的retainCount为1,但它是16863520.Class GeometryCalculator完全是空的.没有方法,没有实例变量.

cocoa memory-management objective-c

0
推荐指数
1
解决办法
297
查看次数

不要担心`retainCount`?真?

我被告知不要担心保留计数.我明白我不应该决定releaseretain使用基于条件逻辑retainCount,但我不应该担心吗?我认为这些以某种方式对应于内存使用.

例如,如果我有一堆子视图UIView,我也已经放入了NSArray能够迭代它们,那么这不会使保留计数加倍,从而使应用程序的内存使用量增加一倍吗?如果是这样,如果子视图是500个UIControl实例,这是否代价高昂或微不足道?当然,这假设我需要500个实例.

iphone memory-management objective-c

0
推荐指数
3
解决办法
190
查看次数

如何使用boost :: object_pool <> :: construct和非const引用作为ctor参数?

以某种方式使用boost :: object_pool <> :: construct和非const引用是否可行?

以下代码段无法编译(VS2010):

foo::foo(bar & b)
{
}

static boost::shared_ptr<foo> foo::create(bar & b)
{
  return boost::shared_ptr<foo>(foo_pool.construct(b),
    boost::bind(& boost::object_pool<foo>::destroy, & foo_pool, _1));
}
Run Code Online (Sandbox Code Playgroud)

VS2010抱怨无法将bar转换为const bar&.看看boost :: object_pool <> :: construct,原因很清楚:

element_type * construct(const T0 & a0)
Run Code Online (Sandbox Code Playgroud)

我不能使ctor参数const.是否有一个技巧使boost :: object_pool <>与我的foo类一起工作?

c++ boost memory-management pool

0
推荐指数
1
解决办法
716
查看次数

C++返回向量,无法弄清楚出了什么问题

以下程序不断崩溃,我无法弄清楚是什么问题.似乎v在某个主要功能中不可用..

#include <iostream>
#include <vector>

using namespace std;

vector<string> *asdf()
{
    vector<string> *v = new vector<string>();
    v->push_back("blah");
    v->push_back("asdf");
    return v;
}

int main()
{
    vector<string> *v = NULL;
    v = asdf();

    for (int i=0; i<(v->size()); v++) {
        cout << (*v)[i] << endl;
    }

    delete v;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ memory-management

0
推荐指数
1
解决办法
216
查看次数

保存实例变量

我们的服务器最近一直在下降很多,我的任务是改善一组被认定为罪魁祸首的类的内存使用.

我有初始化对象实例的代码,如下所示:

布尔var1; 布尔var2; ...布尔var100;

void setup() {
 var1 = map.hasFlag("var1");
 var2 = map.hasFlag("var2);
 .
 .
 .
 if (map.hasFlag("some flag") {
     doSomething();
 }
 if (var1) {
   increment something
 }
 if (var2) {
   increment something
 }

}
Run Code Online (Sandbox Code Playgroud)

设置代码大约需要1300行.我的问题是,在使用太多实例变量方面,这种方法是否有可能更有效.

顺便说一下,实例变量用在"main"方法handleRow()中,例如:

handleRow(){
   if (var1) {
     doSomething();
   }
   .
   .
   . 
   if (var100) {
     doSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想的一个解决方案是通过删除setup方法中的实例变量来更改实现,并在需要时直接从地图中调用它:

handleRow(){
  if (map.hasFlag("var1") {
      doSomething();
  }
  .
  .
  . 
  if (map.hasFlag("var100") {
     doSomething();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我正在考虑的一个解决方案,但我想听听社区的意见.:)

java memory memory-management

0
推荐指数
1
解决办法
173
查看次数

何时保留在目标C?

我已经写了几个星期的目标c了.然而,这个问题仍困扰着我.任何人都可以用痛苦的英语解释:何时保留一个物体?

谢谢

iphone memory-management objective-c

0
推荐指数
1
解决办法
129
查看次数

不知怎的,我的单身人士属性正在被释放

我有一个单独的对象PoolManager,它在plist中加载并保存一些数据.在我的程序中,当需要了解我的池时,它会询问[PoolManager sharedPoolManager]它的属性.我有一个视图负责设置这些属性,而其他所有其他属性只是从中读取.一切正常,然后无缘无故地说,它开始崩溃了.我设置NSZombieEnabled = YES并且可以看到,当我访问这两个NSString属性中的一个时,它们似乎已被释放.调试器消息是:*** -[CFString respondsToSelector:]: message sent to deallocated instance 0x5a336d0

我尝试回到之前的快照,其中一切正常,它仍然这样做.我甚至使用TimeMachine从昨天开始回到项目中,它也是如此.我很困惑.

这是单例对象代码......它是surfaceshape字符串显然是僵尸.对不起NSLogs


//  MyPoolSingleton.h

#import <Foundation/Foundation.h>

#define kFileName @"data.plist"

@interface PoolManager : NSObject {
    float   volume;
    float length;
    float width;
    float depth;    
    NSString *surface;
    NSString *shape;
    BOOL isMetric;
    int fcTarget;
    int cyaTarget;
    int taTarget;
    int chTarget;
    int saltTarget;
}

@property float volume;
@property float length;
@property float width;
@property float depth;
@property (nonatomic, retain) …
Run Code Online (Sandbox Code Playgroud)

iphone xcode memory-management objective-c nszombie

0
推荐指数
1
解决办法
658
查看次数

"self.propery = [[SomeClass alloc] init];" 泄密记忆?

在Objective-C中编写是否安全

self.propery = [[SomeClass alloc] init];
Run Code Online (Sandbox Code Playgroud)

代替

SomeClass *tmp = [[SomeClass alloc] init];
self.property = tmp;
[tmp release];
Run Code Online (Sandbox Code Playgroud)

或者第一种形式会泄漏内存吗?

memory-management objective-c

0
推荐指数
1
解决办法
893
查看次数

如何判断const char*是否指向有效字符串?

std::string str = "string":
const char* cstr = str.c_str();
str.clear();
//here, check if cstr points to a string literal.
Run Code Online (Sandbox Code Playgroud)

cstr在调试或发布模式下运行程序时,如何检查是否仍指向字符串?

有没有办法在C++中使用异常处理来确定这个?

c++ memory-management

0
推荐指数
1
解决办法
169
查看次数

删除时没有free()的特殊模式?C++

我知道这听起来很奇怪,但我需要我的应用程序快速运行,它会做很多新的和删除.所有函数调用new并将ptr传递给期望推送指针到列表或双端队列的那些.

在主循环结束时,程序遍历所有内存并删除它(除非我忘记删除它).我并不夸张.是否有一种模式允许我的代码为new分配objs但不删除它们但只是将其标记为未使用,以便该结构的下一个新代码将使用它而不是完全分配?

我想这会提高性能.它没有完全做到所以我不能基准但我相信我会看到一个提升,如果这是自动的那么好.我可以使用这样的模式或标志吗?

我正在使用gcc(linux,win)和MSVC2010(win).

c++ memory-management

0
推荐指数
2
解决办法
214
查看次数

标签 统计

memory-management ×10

objective-c ×5

c++ ×4

iphone ×3

boost ×1

cocoa ×1

java ×1

memory ×1

nszombie ×1

pool ×1

xcode ×1