标签: alloc

这增加了保留计数:alloc还是init?

当我们需要创建一个对象并获得它的所有权时,我们会写

NSObject *someObject = [[NSObject alloc] init];
Run Code Online (Sandbox Code Playgroud)

之后,someObject保留计数将等于1.哪种方法会增加计数,alloc或者init,在Apple的文档中,这种行为的描述是什么?

objective-c init alloc retaincount

4
推荐指数
3
解决办法
2328
查看次数

这种realloc的使用是否正确?

原始问题

我可以使用realloc()如下代码的函数:

int *ptr, i, num=5;

for (i=0; i<num; i++)
  void *nptr = realloc (ptr, (i+1) * sizeof(int) );
Run Code Online (Sandbox Code Playgroud)

c realloc alloc

4
推荐指数
1
解决办法
413
查看次数

为什么在抛出'std :: bad_alloc'实例后终止调用?

每隔1秒钟,功能就会起作用。
我的系统是linux。跑步突然死亡。

    -----global-------
    static int arrayNum[33000];
    -------------------
function(){
    unsigned short int**  US_INT;
    US_INT= new unsigned short int*[255];
            for(int i = 0; i < 255; i++)
            {
                US_INT[i] = new unsigned short int[128];
                memset(US_INT[i], 0, sizeof(unsigned short int) * 128);
            }
    double x;
    double y;
    int cnt= 0;  
            int nArrayCount=0;
          for(int i = 0; i < 255; i++)
            {

                for(int j=0;j<128;j++){

                    x=j;
    y=cnt
                    nArray[nArrayCount]=US_INT[i][j];

                    nArrayCount++;

                }
                cnt=cnt+(256/255); 

            }


     for(int i = 0; i < 255; i++)
            {
                delete US_INT[i];
            }

            delete[] …
Run Code Online (Sandbox Code Playgroud)

c++ memory qt alloc

4
推荐指数
1
解决办法
6511
查看次数

我可以返回已分配的对象并将其释放到函数外吗?

- (NSString *)allocString{
    NSString *str = [[NSString alloc] init];
    return str;
}

- (void)viewDidLoad{
    NSString *name = [self allocString];

    [name release]; // Can I release an object here?
}
Run Code Online (Sandbox Code Playgroud)

嗨,我刚刚用NSString写了一个简单的例子.在我的真实程序中,我使用了自定义的UIView类,而不是NSString.

allocString创建一个NSString实例,其保留计数为1.没有自动释放,它只返回一个实例.

在viewDidLoad方法中,变量"name"只指向allocString方法返回的对象,因此实例的保留计数仍为1.

因此,[名称释放]会减少其保留计数.

这是正确的吗?或者我必须在allocString方法中自动释放它?谢谢!

memory iphone objective-c alloc

3
推荐指数
1
解决办法
1363
查看次数

init]在自动引用计数中

我知道我想要使用:

ObjectClass *tmpObject = [[ObjectClass alloc] init];
realObject = tmpObject;
[tmpObject release]
Run Code Online (Sandbox Code Playgroud)

初始化realObject(类中realObject的对象在哪里)

但是现在使用ARC模式,释放是自动的,我还需要使用这种技术吗?我可以简单地使用realObject = [[ObjectClass alloc] init];吗?如果没有,是否有任何具体原因会泄漏?

谢谢

xcode initialization objective-c alloc automatic-ref-counting

3
推荐指数
1
解决办法
3493
查看次数

IPhone Objective C内存分配

我理解当使用Alloc时,新的或复制你拥有该对象并需要释放该对象.我明白,如果我保留一个我需要释放它的对象.

但是,如果我在方法结束时有以下语句:

return [[UIImage alloc] initWithContentsOfFile:path];
Run Code Online (Sandbox Code Playgroud)

我拥有该UIImage对象因为我分配了内存空间,但我不再引用它,因为它被返回给调用者.在我的dealloc()方法中,我无法释放它,因为我没有参考.

所以我的问题是,这是正确的:

return [[[UIImage alloc] initWithContentsOfFile:path] autorelease];
Run Code Online (Sandbox Code Playgroud)

我相信在这种情况下,调用者可以保留返回的对象,如果他们想要获得所有权并最终需要释放自己.

谢谢你的帮助.

memory iphone memory-management objective-c alloc

3
推荐指数
1
解决办法
228
查看次数

Child类调用父类的方法

在objective-C中,我希望有一个子类调用或调用父类的方法.因为在父级中已经分配了子级,并且子级执行了调用父方法的操作.像这样:

//in the parent class
childObject *newChild = [[childClass alloc] init];
[newChild doStuff];

//in the child class
-(void)doStuff {
    if (something happened) {
        [parent respond];
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?(如果你能彻底解释我会很感激)

methods objective-c parent-child class-hierarchy alloc

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

单身实施.阻止外部使用的alloc和init方法

我有一个我希望作为Singleton实现的类.

我希望通过以下方式创建/访问此类实例的唯一方法是:

+(MYClass*)sharedInstance 
Run Code Online (Sandbox Code Playgroud)

方法.在方法实现中调用alloc和init(当然).

有没有办法阻止alloc和init的使用,或者让它们"空",如果尝试通过sharedInstance方法创建该类的实例(但直接通过alloc + init)?

singleton init singleton-methods alloc ios

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

有没有办法在 C 中从左侧缩小内存分配而不复制数据?

据我所知,C 标准库允许通过使用 realloc 函数来调整内存分配的大小,如下例所示:

char *a = malloc(10);
char *b = realloc(a, 8);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a 和 b 可能相等,并且分配已有效地从右侧缩小了两个字节。

但是,我想知道是否有办法从左侧缩小内存分配,如下所示:

char *a = malloc(10);
char *b = /* ... */;  // shrink a from the left by 2 bytes
Run Code Online (Sandbox Code Playgroud)

其中(a + 2) == b、 以及 a 开头的原始 2 个字节现在可供分配器使用。这应该发生,而无需将数据复制到内存中的新位置。只需缩小分配即可。

我知道使用 realloc 从右侧缩小内存或手动将数据复制到新的较小分配可能是一种选择,但这些方法不适合我的需求。

有没有办法使用 C 的标准库或提供此功能的任何其他库来实现此目的?

我并不是要求 100% 的保证,realloc 也可以返回指向不同位置的指针,但很可能会。

预先感谢您的见解。

我可以将所有字节向左移动并尝试缩小,但这涉及复制。

c realloc alloc

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

问题是重新分配已分配的对象

崩溃发生在[searchDict release].如果我切换两条最新线路的顺序,它仍会在最新线路上崩溃(现在[searchArray release]).我对Objective C很新,我想我没有正确的alloc/release ...帮助?:)

NSMutableDictionary *searchDict = [[NSMutableDictionary alloc] init];
NSMutableArray *searchArray = [[NSMutableArray alloc] init];

for(int i = 0; i < 2; i++) { // Run two times ("Favorites" and "All")
    searchDict = [listOfItems objectAtIndex:i];
    searchArray = [searchDict objectForKey:@"Entries"];

    for (NSString *sTemp in searchArray) {
        NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];
        if (titleResultsRange.length > 0)
            [listOfItemsDynamic addObject:sTemp];
    }
}

[searchArray release];
[searchDict release];
Run Code Online (Sandbox Code Playgroud)

release objective-c alloc

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