在尝试重用现有的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) 嗨我有一个充满关键字的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)
谢谢
石匠
我创建了一个可变数组,我有两个NSString变量.现在我想将这两个NSStrings 添加到我的数组中.这怎么可能?谢谢.
我有一个包含嵌套NSArrays的NSArray.我正在寻找一种方法来根据嵌套数组的对象数按升序对父数组进行排序.所以如果[array1 count]是4,[array2 count]是2并且[array3 count]是9,我会得到:array2,array1,array3 ......
为什么在[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) 如果我有一个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
目前,我正在使用来自表格中显示的数据库的数据来编写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) 我使用过滤表格结果 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)
它有效,但不是所有结果:

我编写了一个具有属性的类,我想将此类的实例添加到一个可变数组中,之后我想设置实例的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) 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) nsmutablearray ×10
objective-c ×8
ios ×6
iphone ×4
cocoa ×3
nsarray ×2
nsstring ×2
autorelease ×1
cocoa-touch ×1
ios4 ×1
nspredicate ×1
release ×1
reusability ×1
uisearchbar ×1
xcode ×1
xcode4.3 ×1