当我们需要创建一个对象并获得它的所有权时,我们会写
NSObject *someObject = [[NSObject alloc] init];
之后,someObject保留计数将等于1.哪种方法会增加计数,alloc或者init,在Apple的文档中,这种行为的描述是什么?
原始问题
我可以使用realloc()如下代码的函数:
int *ptr, i, num=5;
for (i=0; i<num; i++)
  void *nptr = realloc (ptr, (i+1) * sizeof(int) );
每隔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[] …- (NSString *)allocString{
    NSString *str = [[NSString alloc] init];
    return str;
}
- (void)viewDidLoad{
    NSString *name = [self allocString];
    [name release]; // Can I release an object here?
}
嗨,我刚刚用NSString写了一个简单的例子.在我的真实程序中,我使用了自定义的UIView类,而不是NSString.
allocString创建一个NSString实例,其保留计数为1.没有自动释放,它只返回一个实例.
在viewDidLoad方法中,变量"name"只指向allocString方法返回的对象,因此实例的保留计数仍为1.
因此,[名称释放]会减少其保留计数.
这是正确的吗?或者我必须在allocString方法中自动释放它?谢谢!
我知道我想要使用:
ObjectClass *tmpObject = [[ObjectClass alloc] init];
realObject = tmpObject;
[tmpObject release]
初始化realObject(类中realObject的对象在哪里)
但是现在使用ARC模式,释放是自动的,我还需要使用这种技术吗?我可以简单地使用realObject = [[ObjectClass alloc] init];吗?如果没有,是否有任何具体原因会泄漏?
谢谢
xcode initialization objective-c alloc automatic-ref-counting
我理解当使用Alloc时,新的或复制你拥有该对象并需要释放该对象.我明白,如果我保留一个我需要释放它的对象.
但是,如果我在方法结束时有以下语句:
return [[UIImage alloc] initWithContentsOfFile:path];
我拥有该UIImage对象因为我分配了内存空间,但我不再引用它,因为它被返回给调用者.在我的dealloc()方法中,我无法释放它,因为我没有参考.
所以我的问题是,这是正确的:
return [[[UIImage alloc] initWithContentsOfFile:path] autorelease];
我相信在这种情况下,调用者可以保留返回的对象,如果他们想要获得所有权并最终需要释放自己.
谢谢你的帮助.
在objective-C中,我希望有一个子类调用或调用父类的方法.因为在父级中已经分配了子级,并且子级执行了调用父方法的操作.像这样:
//in the parent class
childObject *newChild = [[childClass alloc] init];
[newChild doStuff];
//in the child class
-(void)doStuff {
    if (something happened) {
        [parent respond];
    }
}
我怎么能这样做?(如果你能彻底解释我会很感激)
我有一个我希望作为Singleton实现的类.
我希望通过以下方式创建/访问此类实例的唯一方法是:
+(MYClass*)sharedInstance 
方法.在方法实现中调用alloc和init(当然).
有没有办法阻止alloc和init的使用,或者让它们"空",如果尝试通过sharedInstance方法创建该类的实例(但直接通过alloc + init)?
据我所知,C 标准库允许通过使用 realloc 函数来调整内存分配的大小,如下例所示:
char *a = malloc(10);
char *b = realloc(a, 8);
在这种情况下,a 和 b 可能相等,并且分配已有效地从右侧缩小了两个字节。
但是,我想知道是否有办法从左侧缩小内存分配,如下所示:
char *a = malloc(10);
char *b = /* ... */;  // shrink a from the left by 2 bytes
其中(a + 2) == b、 以及 a 开头的原始 2 个字节现在可供分配器使用。这应该发生,而无需将数据复制到内存中的新位置。只需缩小分配即可。
我知道使用 realloc 从右侧缩小内存或手动将数据复制到新的较小分配可能是一种选择,但这些方法不适合我的需求。
有没有办法使用 C 的标准库或提供此功能的任何其他库来实现此目的?
我并不是要求 100% 的保证,realloc 也可以返回指向不同位置的指针,但很可能会。
预先感谢您的见解。
我可以将所有字节向左移动并尝试缩小,但这涉及复制。
崩溃发生在[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];