标签: nsmutablearray

重用NSMutableArray

在尝试重用现有的NSMutableArray时(为了节省内存),我得到了一些泄漏(由Instruments观察到).

基本上我正在创建一个NSMutableArray,用对象(UIImages)填充它并将它传递给另一个保留它的对象.但是,我现在需要再次使用NSMutableArray.我想我会释放它的所有对象,清空它,一切都会好的,但是仪器报告了一个CALayer泄漏的对象(??),该方法看起来如下:

NSString *fileName;
NSMutableArray *arrayOfImages = [[NSMutableArray alloc] init];

// fill the array with images
for(int i = 0; i <= 7; i++) {
    fileName = [NSString stringWithFormat:@"myImage_%d.png", i];
    [arrayOfImages addObject:[UIImage imageNamed:fileName]];
}

// create a button with the array
aButton = [[CustomButtonClass buttonWithType:UIButtonTypeCustom] 
                   initWithFrame:someFrame
                   imageArray:arrayOfImages];

// release its objects
for(int i = 0; i < [arrayOfImages count]; i++) {
    [[arrayOfImages objectAtIndex:i] release];
}
// empty array
[arrayOfImages removeAllObjects];

// fill it with other images
for(int i = 0; …
Run Code Online (Sandbox Code Playgroud)

cocoa release objective-c reusability nsmutablearray

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

拉出NSMutableArray中的所有对象并将其吐出到NSString中

嗨我有一个充满关键字的nsmutable数组,我希望键入每个对象,并在下面的每个对象示例后用逗号将其吐出.NSMutable数组称为KeywordArray

数组结构

Keyword 1
Keyword 2
Keyword 3
Keyword 4 
Keyword 5
Keyword 6 
Keyword 7
Run Code Online (Sandbox Code Playgroud)

我希望在NSString中将NSMutableArray转换为以下格式

Keyword 1, Keyword 2, Keyword 3, Keyword 4, Keyword 5, Keyword 6, Keyword 7
Run Code Online (Sandbox Code Playgroud)

谢谢

石匠

iphone objective-c nsstring nsmutablearray ios4

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

将NSStrings添加到可变数组

我创建了一个可变数组,我有两个NSString变量.现在我想将这两个NSStrings 添加到我的数组中.这怎么可能?谢谢.

cocoa objective-c nsstring nsmutablearray

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

如何按数组计数对NSArray的嵌套NSArray进行排序?

我有一个包含嵌套NSArrays的NSArray.我正在寻找一种方法来根据嵌套数组的对象数按升序对父数组进行排序.所以如果[array1 count]是4,[array2 count]是2并且[array3 count]是9,我会得到:array2,array1,array3 ......

iphone objective-c nsmutablearray nsarray ios

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

为什么在[NSMutableArray数组]后需要这个自动释放以避免内存泄漏?

为什么在[NSMutableArray数组]后需要这个自动释放以避免内存泄漏?

那是仪器告诉我有泄漏.通过将自动释放器解决它,但是我不确定为什么要这样做."数组"方法不像INIT或COPY等......

@interface Weekend : NSObject {
    NSMutableArray*     _events;     
}
@property (nonatomic, retain) NSMutableArray* events;
@end

@implementation Weekend

@synthesize events = _events;

- (id)init {
    if (self == [super init])
    {
        self.events = [[NSMutableArray array] autorelease];    // WHY IS THIS AUTORELEASE REQUIRED
    }
    return self;
}

- (void) dealloc {
    [_events release];  _events = nil;
    [super dealloc];
}

@end
Run Code Online (Sandbox Code Playgroud)

注意:这是我在Intruments中看到的,当我取出autorelease out(并且在我将"if(self == [super init])"改为"if((self = [super init]))"之后

#  Category     Event        Code Location
0  __NSArrayM   Malloc       at the [NSMutableArray …
Run Code Online (Sandbox Code Playgroud)

iphone memory-management autorelease nsmutablearray ios

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

将NSMutableArray或NSMutableDictionary传递给方法 - 您可以添加到它吗?

如果我有一个NSMutableArrayor NSMutableDictionary并将其传递给方法a la:

-(void)addToThisArray:(NSMutableArray *)theMutableArray
{
    [theMutableArray addObject:@"test"];
}
Run Code Online (Sandbox Code Playgroud)

并称之为:

 NSMutableArray *theMutableArrayToPass = [[NSMutableArray alloc] init];
 [theMutableArrayToPass addObject:@"2"];
 [self addToThisArray:theMutableArrayToPass];
Run Code Online (Sandbox Code Playgroud)

这是改变一个NSMutableArray或有效的方法NSMutableDictionary吗?当然,我对数组/字典的作用要比这个例子多得多,但我习惯于Perl,我们一直都是通过引用传递的.

cocoa-touch objective-c nsmutablearray nsmutabledictionary ios

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

当我在其中搜索NSString时,如何确定NSMutableArray中对象的索引?

目前,我正在使用来自表格中显示的数据库的数据来编写UISearchBar的搜索功能.我找出搜索结果并将其保存到NSMutableArray *searchResults.这是看起来如何:

- (void) searchGrapesTableView {
    [searchResult removeAllObjects];
    numSearchWines=0;
    for (NSString *str in listOfWines)
    {
        NSRange titleResultsRange = [str rangeOfString:searchBar.text options:NSCaseInsensitiveSearch];
        if (titleResultsRange.length > 0) {
            [searchResult addObject:str];
            numSearchWines++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

listOfWines也是一个NSMutableArray,它包含可以从中搜索的所有名称的列表.理想情况下,我想确定listOfWines具有匹配值的对象的索引,并将其添加到另一个NSMutableArray,这样我以后可以很容易地访问它.例如,稍后当我使用此搜索数据显示表格单元格时,我有以下代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"wineCell"];
    //determine how many to add to get the grape ID
    NSInteger grapeID=0;
    for (int i=0; i<indexPath.section; i++) {
        grapeID += [self.tableView numberOfRowsInSection:i];
    }

    Wines *currentWine;
    if (isSearchOn) {
        NSString *cellValue …
Run Code Online (Sandbox Code Playgroud)

xcode objective-c nsmutablearray uisearchbar xcode4.3

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

为什么我使用NSSortDescriptor的排序方法效果不好?

我使用过滤表格结果 NSPredicate

   NSPredicate *resultPredicate = [NSPredicate
                                    predicateWithFormat:@"Name CONTAINS[cd] %@ OR Address CONTAINS[cd] %@",
                                    searchText,
                                    searchText];

    searchResults = [NSMutableArray array];

    for (key in dict) {

        if ([resultArray containsObject:key]) {

            NSArray *array = [dict objectForKey:key];
            matches = [array filteredArrayUsingPredicate:resultPredicate];

            if (matches.count > 0) {

                [searchResults addObjectsFromArray:matches];
                // sorting array
                NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"Distance" ascending:YES];
                [searchResults sortUsingDescriptors:[NSArray arrayWithObject:sort]];
            }

        }
    }

    }
Run Code Online (Sandbox Code Playgroud)

然后我使用排序结果数组 NSSortDescriptor

NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"Distance" ascending:YES];
                [searchResults sortUsingDescriptors:[NSArray arrayWithObject:sort]];
Run Code Online (Sandbox Code Playgroud)

它有效,但不是所有结果:

在此输入图像描述

nsmutablearray nssortdescriptor nspredicate ios

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

如何在NSArray中设置对象的属性

我编写了一个具有属性的类,我想将此类的实例添加到一个可变数组中,之后我想设置实例的num属性.但我不知道正确的语法.请告诉我正确的语法或方法.

@interface ClassA : NSObject

@property int num;

-(void) method;
+(id) getClassAObj:(int)number;

@end
--------------------------------
#import "ClassA.h"

@implementation ClassA

@synthesize num;

-(void) method{
    NSLog(@"ClassA method Called");
}
+(id) getClassAObj:(int)number {

    ClassA *obj = [[ClassA alloc] init];
    obj.num = number;
    return obj;

}

@end
-----------------------
Run Code Online (Sandbox Code Playgroud)

现在在main我想手动设置num属性但我不知道什么是正确的语法

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        // insert code here...
        NSLog(@"Hello, World!");

        NSMutableArray *array = [NSMutableArray arrayWithObjects:
                                [ClassA getClassAObj:9],
                                [ClassA getClassAObj:4], nil];
        NSLog(@"%i",[[array objectAtIndex:0] num]);
        NSLog(@"%i",[array[1] num]);
        //array[1].num = 3;              <--- Help …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa objective-c nsmutablearray ios

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

NSMutableArray addObject返回nil

StackOverflow上已经存在一些类似的问题.我确实检查了它们,并且在大多数情况下它返回nil,因为它NSMutableArray尚未初始化.但在我的情况下,我做了初始化.

这是我的代码的一部分:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.storedTimeZones = [[NSMutableArray alloc] init];
    NSData *storedData = [[NSUserDefaults standardUserDefaults] dataForKey:@"timeZones"];

    if (storedData != nil ) {
        self.storedTimeZones = [NSKeyedUnarchiver unarchiveObjectWithData:storedData];
    }

    NSString *str = [self.smallRegionArray[indexPath.row] stringByReplacingOccurrencesOfString:@"_" withString:@" "];
    [self.storedTimeZones addObject: str];
    NSLog(str); //the string was printed successfully.
    NSLog(@"%lu", (unsigned long)self.storedTimeZones.count); //'0' was printed
}
Run Code Online (Sandbox Code Playgroud)

更新 @Caleb是对的,[NSKeyedUnarchiver unarchiveObjectWithData:storedData返回零.我解决了这个问题:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    self.storedTimeZones = [[NSMutableArray alloc] init];
    NSData *storedData = [[NSUserDefaults standardUserDefaults] dataForKey:@"timeZones"];
    NSMutableArray *ary = …
Run Code Online (Sandbox Code Playgroud)

objective-c nsmutablearray nsarray ios

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