- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序存在内存分配问题。这导致我的程序卡住并最终结束。查看我的代码,我意识到大部分内存分配都在 CFString 中。下面是导致此问题的类。
#import "iMAPProdutosPesquisar.h"
#import "iMAPArrayProdutos.h"
#import "iMAPTabela.h"
#import "iMAPProdutosFiltro.h"
#import "iMAPArrayAbreviatura.h"
static NSString *dadosProdutos = nil;
@implementation iMAPProdutosPesquisar
@synthesize pop;
@synthesize tv;
@synthesize sb;
@synthesize datBaseName;
@synthesize datBasePath;
@synthesize iMAP;
@synthesize abrev;
@synthesize opcFil;
@synthesize cab;
@synthesize cons;
#define TAG_1 1
#define TAG_2 2
#define TAG_3 3
#define FIRST_CELL_IDENTIFIER @"TrailItemCell"
#define SECOND_CELL_IDENTIFIER @"RegularCell"
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc {
[pop release];
[tv release];
[sb release];
[datBaseName release];
[datBasePath release];
[iMAP release];
[abrev release];
[opcFil release];
[cab release];
[cons release];
[super dealloc];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
[self initDatBase];
[cab setImage:[UIImage imageNamed:@"cabecalho-produtos.png"]];
cab.opaque = YES;
}
- (void)viewDidUnload {
[self setPop:nil];
[self setTv:nil];
[self setSb:nil];
[self setDatBaseName:nil];
[self setDatBasePath:nil];
[self setIMAP:nil];
[self setAbrev:nil];
[self setOpcFil:nil];
[self setCab:nil];
[self setCons:nil];
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark UISearchBarDelegate
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
[self initDatBase];
}
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
[searchBar resignFirstResponder];
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
[searchBar resignFirstResponder];
}
#pragma mark tableView delegates
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
return [iMAP count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
iMAPArrayProdutos *arrayProd = (iMAPArrayProdutos *)[iMAP objectAtIndex:indexPath.row];
NSString *myIdent = @"myIdent";
iMAPTabela *tab = (iMAPTabela *)[tableView dequeueReusableCellWithIdentifier:myIdent];
tv.autoresizesSubviews = YES;
if (tab == nil) {
tab = [[[iMAPTabela alloc] initWithFrame:CGRectZero reuseIdentifier:myIdent] autorelease];
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10.0, 0, 150.0, tableView.rowHeight)] autorelease];
[tab addColumn:170];
label.tag = TAG_1;
label.font = [UIFont systemFontOfSize:14.0];
label.text = arrayProd.cod;
label.textAlignment = UITextAlignmentLeft;
label.textColor = [UIColor blackColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[tab.contentView addSubview:label];
label = [[[UILabel alloc] initWithFrame:CGRectMake(180.0, 0, 150.0, tableView.rowHeight)] autorelease];
[tab addColumn:340];
label.tag = TAG_2;
label.font = [UIFont systemFontOfSize:14.0];
label.text = arrayProd.artrf2;
label.textAlignment = UITextAlignmentLeft;
label.textColor = [UIColor blackColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[tab.contentView addSubview:label];
label = [[[UILabel alloc] initWithFrame:CGRectMake(350.0, 0, 418.0, tableView.rowHeight)] autorelease];
[tab addColumn:768];
label.tag = TAG_3;
label.font = [UIFont systemFontOfSize:14.0];
label.text = arrayProd.descri;
label.textAlignment = UITextAlignmentLeft;
label.textColor = [UIColor blackColor];
label.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleHeight;
[tab.contentView addSubview:label];
}
UILabel *label_1 = (UILabel *)[tab.contentView viewWithTag:TAG_1];
label_1.text = arrayProd.cod;
UILabel *label_2 = (UILabel *)[tab.contentView viewWithTag:TAG_2];
label_2.text = arrayProd.artrf2;
UILabel *label_3 = (UILabel *)[tab.contentView viewWithTag:TAG_3];
label_3.text = arrayProd.descri;
return tab;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
iMAPArrayProdutos *arrayProd = (iMAPArrayProdutos *)[iMAP objectAtIndex:indexPath.row];
[iMAPProdutosPesquisar setDefaultValue:[NSString stringWithFormat:@"%@", arrayProd.cod]];
}
- (IBAction)fil:(id)sender {
iMAPProdutosFiltro *prodFil = [[iMAPProdutosFiltro alloc] init];
pop = [[UIPopoverController alloc] initWithContentViewController:prodFil];
prodFil.pop = pop;
[prodFil release];
[pop setPopoverContentSize:CGSizeMake(170, 220)];
[pop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
- (void)initDatBase {
datBaseName = @"iMAP.sqlite";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
datBasePath = [documentsDir stringByAppendingPathComponent:datBaseName];
[self checkAndCreateDatBase];
[self readFilFromDatBase];
if ([sb.text length] > 0) {
[self readAvancFromDatBase];
}
[self readProdFromDatBase];
}
- (void)checkAndCreateDatBase {
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:datBasePath];
if(success) {
return;
}
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:datBaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:datBasePath error:nil];
[fileManager release];
}
- (void)readFilFromDatBase {
sqlite3 *datBase;
if(sqlite3_open([datBasePath UTF8String], &datBase) == SQLITE_OK) {
const char *sqlStat = "SELECT OPCAO FROM FILTRO WHERE R_E_C_N_O_ = 2";
sqlite3_stmt *compiledStat;
if(sqlite3_prepare_v2(datBase, sqlStat, -1, &compiledStat, NULL) == SQLITE_OK) {
while(sqlite3_step(compiledStat) == SQLITE_ROW) {
opcFil = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStat, 0)];
}
}
sqlite3_finalize(compiledStat);
}
sqlite3_close(datBase);
}
- (void)readAvancFromDatBase {
sqlite3 *datBase;
abrev = [[NSMutableArray alloc] init];
if(sqlite3_open([datBasePath UTF8String], &datBase) == SQLITE_OK) {
const char *sqlStat;
sqlite3_stmt *compiledStat;
NSString *string1;
NSString *string2;
string1 = @"SELECT ABV_COMPLETA FROM ABREV WHERE ABV_REDUZ LIKE '%";
string2 = @"%'";
NSString *result = [NSString stringWithFormat:@"%@%@%@", string1, sb.text, string2];
sqlStat = [result UTF8String];
if(sqlite3_prepare_v2(datBase, sqlStat, -1, &compiledStat, NULL) == SQLITE_OK) {
while(sqlite3_step(compiledStat) == SQLITE_ROW) {
NSString *abvCompl = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStat, 0)];
iMAPArrayAbreviatura *arrayAbrev = [[iMAPArrayAbreviatura alloc] reduz:nil completa:abvCompl observacao:nil abrUnq:nil recno:nil];
[abrev addObject:arrayAbrev];
[arrayAbrev release];
}
}
sqlite3_finalize(compiledStat);
}
sqlite3_close(datBase);
}
- (void)readProdFromDatBase {
sqlite3 *datBase;
iMAP = [[NSMutableArray alloc] init];
if(sqlite3_open([datBasePath UTF8String], &datBase) == SQLITE_OK) {
sqlite3_stmt *compiledStat;
const char *sqlStat;
if ([sb.text length] == 0) {
sqlStat = "SELECT COD, ARTRF2, DESCRI FROM APSB1010";
}
else {
NSString *string1;
NSString *string2 = @"%'";
NSString *result;
if ([opcFil isEqualToString:@"1"]) {
string1 = @"SELECT COD, ARTRF2, DESCRI FROM APSB1010 WHERE TRIM(COD) LIKE '%";
result = [NSString stringWithFormat:@"%@%@%@", string1, sb.text, string2];
}
else if ([opcFil isEqualToString:@"2"]) {
string1 = @"SELECT COD, ARTRF2, DESCRI FROM APSB1010 WHERE TRIM(ARTRF2) LIKE '%";
result = [NSString stringWithFormat:@"%@%@%@", string1, sb.text, string2];
}
else if ([opcFil isEqualToString:@"3"]) {
string1 = @"SELECT COD, ARTRF2, DESCRI FROM APSB1010 WHERE TRIM(DESCRI) LIKE '%";
result = [NSString stringWithFormat:@"%@%@%@", string1, sb.text, string2];
}
else if ([opcFil isEqualToString:@"4"]) {
string1 = @"SELECT COD, ARTRF2, DESCRI FROM APSB1010 WHERE TRIM(APLICA) LIKE '%";
result = [NSString stringWithFormat:@"%@%@%@", string1, sb.text, string2];
}
else {
string1 = @"SELECT COD, ARTRF2, DESCRI FROM APSB1010 WHERE (";
NSString *string1 = @"SELECT * FROM APSB1010 WHERE (";
NSString *string3 = @"TRIM(DESCRI) LIKE '%";
NSString *string4 = @" OR ";
NSString *string5 = @")";
cons = [[NSString alloc] init];
for (int i = 0; i < [abrev count]; i++) {
iMAPArrayAbreviatura *arrayAbrev = (iMAPArrayAbreviatura *)[abrev objectAtIndex:i];
if (i > 0) {
cons = [cons stringByAppendingString:string4];
}
cons = [cons stringByAppendingString:string3];
cons = [cons stringByAppendingString:arrayAbrev.completa];
cons = [cons stringByAppendingString:string2];
}
result = [NSString stringWithFormat:@"%@%@%@", string1, cons, string5];
}
sqlStat = [result UTF8String];
}
if(sqlite3_prepare_v2(datBase, sqlStat, -1, &compiledStat, NULL) == SQLITE_OK) {
while(sqlite3_step(compiledStat) == SQLITE_ROW) {
NSString *prodCod = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStat, 0)];
NSString *prodDescri = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStat, 2)];
NSString *prodArtrf2 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStat, 1)];
iMAPArrayProdutos *arrayProd = [[iMAPArrayProdutos alloc] cod:prodCod prv1:nil grupo:nil picment:nil descri:prodDescri artrf2:prodArtrf2 um:nil embAp:nil desMax:nil imgAp:nil aplica:nil qAtu_01:nil qAtu_11:nil qAtu_12:nil qAtu_13:nil qAtu_14:nil prProm:nil recno:nil];
[iMAP addObject: arrayProd];
[arrayProd release];
}
}
sqlite3_finalize(compiledStat);
}
sqlite3_close(datBase);
[tv reloadData];
}
+ (NSString*)defaultValue {
return dadosProdutos;
}
+ (void)setDefaultValue:(NSString*)newDefaultValue {
if(dadosProdutos != newDefaultValue) {
[dadosProdutos release];
dadosProdutos = [newDefaultValue retain];
}
}
@end
有人告诉我我做错了什么,我被这个问题弄疯了。
最佳答案
你有很多地方可以做类似的事情
datBaseName = @"iMAP.sqlite";
我假设 datBaseName
被定义为一个保留的属性,但是这里只是设置实例变量而不调用访问器,所以当你调用
[datBaseName release]
你正试图释放一个常量字符串——不好的事情会发生。相反,你应该这样做
self.datBaseName = @"iMAP.sqlite";
你也在做这样的事情
datBasePath = [documentsDir stringByAppendingPathComponent:datBaseName];
同样,这并没有调用访问器,因此 datBasePath
没有被保留,并且可能在您尝试使用它时已经被释放。
很可能还有其他问题 - 尝试将问题简化为更简单的示例,这样问题更容易被发现。另请查看 ARC这消除了内存管理中的一些苦差事。 Xcode 也有一堆工具,例如 NSZombies
用于跟踪此类问题。
关于objective-c - 分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8635329/
我有一个应用程序,它会抛出 GKSession 并在各种条件下(连接超时、 session 失败等)创建一个新的 GKSession。不过,我遇到了内存泄漏问题,并且有时会在重新连接几次循环后崩溃。
比如我在宿主代码中有一个浮点指针 float *p 是否可以确定他指向的内存类型(设备/主机)? 最佳答案 在 UVA system 中, 运行时 API 函数 cudaPointerGetAttri
我已将项目转换为 .Net 4.0 并且以下代码不起作用: typeof(RuntimeTypeHandle).GetMethod("Allocate", BindingFlags.Instance
当我声明 char ch = 'ab' 时,ch 只包含 'b',为什么它不存储 'a'? #include int main() { char ch = 'ab'; printf("%c"
我对 Disk Sector 和 Block 有疑问。扇区是一个单位,通常为 512 字节或 1k、2k、4k 等取决于硬件。文件系统 block 大小是一组扇区大小。 假设我正在存储一个 5KB 的
假设我有 8 个人和5000 个苹果。 我想将所有苹果分发给所有 8 个人,这样我就没有苹果了。 但每个人都应该得到不同数量 将它们全部分发出去的最佳方式是什么? 我是这样开始的: let peopl
我正在构建的网站顶部有一个搜索栏。与 Trello 或 Gmail 类似,我希望当用户按下“/”键时,他们的焦点就会转到该搜索框。 我的 JavaScript 看起来像这样: document.onk
我有一小段代码: if (PZ_APP.dom.isAnyDomElement($textInputs)){ $textInputs.on("focus", function(){
我观察到以下行为。 接受了两个属性变量。 @property (nonatomic, retain) NSString *stringOne; @property (nonatomic, assign
我正在解决这样的问题 - 实现一个计算由以下内容组成的表达式的函数以下操作数:“(”、“)”、“+”、“-”、“*”、“/”。中的每个数字表达式可能很大(与由字符串表示的一样大)1000 位)。 “/
我有一组主机和一组任务。 每个主机都有 cpu、mem 和任务容量,每个任务都有 cpu、mem 要求。 每个主机都属于一个延迟类别,并且可以与具有特定延迟值的其他主机通信。 每个任务可能需要以等于或
该程序的作用:从文件中读取一个包含 nrRows 行和 nrColomns 列的矩阵(二维数组)。矩阵的所有元素都是 [0,100) 之间的整数。程序必须重新排列矩阵内的所有元素,使每个元素等于其所在
世界!我有个问题。今天我尝试创建一个代码,它可以找到加泰罗尼亚语号码。但是在我的程序中可以是长数字。我找到了分子和分母。但我不能分割长数字!此外,只有标准库必须在此程序中使用。请帮帮我。这是我的代码
我确定我遗漏了一些明显的东西,但我想在 Objective C 中创建一个 NSInteger 指针的实例。 -(NSInteger*) getIntegerPointer{ NSInteger
这个问题在这里已经有了答案: Difference between self.ivar and ivar? (4 个答案) 关闭 9 年前。
我如何将 v[i] 分配给一系列整数(v 的类型是 vector )而无需最初填充 最佳答案 你的意思是将 std::vector 初始化为一系列整数? int i[] = {1, 2, 3, 4,
我想寻求分配方面的帮助....我把这个作业带到了学校......我必须编写程序来加载一个 G 矩阵和第二个 G 矩阵,并搜索第二个 G 矩阵以获取存在数第一个 G 矩阵的......但是,当我尝试运行
我必须管理资源。它基本上是一个唯一的编号,用于标识交换机中的第 2 层连接。可以有 16k 个这样的连接,因此每次用户希望配置连接时,他/她都需要分配一个唯一索引。同样,当用户希望删除连接时,资源(号
是否有任何通用的命名约定来区分已分配和未分配的字符串?我正在寻找的是希望类似于 us/s 来自 Making Wrong Code Look Wrong ,但我宁愿使用常见的东西也不愿自己动手。 最佳
我需要读取一个 .txt 文件并将文件中的每个单词分配到一个结构中,该结构从结构 vector 指向。我将在下面更好地解释。 感谢您的帮助。 我的程序只分配文件的第一个字... 我知道问题出在函数 i
我是一名优秀的程序员,十分优秀!