在我的应用程序中,我收到了多个内存泄漏.对象是Malloc 48字节,它始终来自负责的调用者strdup.该对象的历史记录仅显示它是Malloced,没有其他保留或释放.堆栈跟踪不显示我的任何代码.我可以选择的唯一相关内容是:
10 UIKit _UIGestureRecognizerSendActions
9 UIKit -[UIScrollView handlePan:]
8 UIKit -[UIScrollView _endPanWithEvent:]
7 UIKit -[UIScrollView(Static) _startTimer:]
6 CoreFoundation CFNotificationCenterAddObserver
5 CoreFoundation _CFXNotificationRegisterObserver
4 libnotify.dylib notify_register_dispatch
3 libnotify.dylib notify_register_mach_port
2 libnotify.dylib token_table_add
1 libsystem_c.dylib strdup
0 libsystem_c.dylib malloc
Run Code Online (Sandbox Code Playgroud)
它似乎在地图视图上滚动时发生,但我不确定如何继续,因为堆栈中没有引用我的代码.我该如何进行诊断?
如果需要任何进一步的信息,请告诉我.
问候,尼克
我已经做了一些阅读,并且认为我已经掌握了await和async关键字的基础知识,关于System.Threading.Task.
但是,我不确定我是否对一个小问题是正确的,我正在寻找验证或有人纠正我.
我正在使用此签名实现异步方法:
public Task ProcessUploadedFile(FileInfo info, string contentType);
Run Code Online (Sandbox Code Playgroud)
显然,如果我想等待方法内的任何内容,我需要在签名中添加async关键字,
我的问题是这样的:如果我的方法做的最后一件事是调用另一个异步方法,或者返回一个任务,那么等待它有什么意义吗?
例如.
1:
public async Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
await DoMethodAsync();
}
Run Code Online (Sandbox Code Playgroud)
2:
public Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
return DoMethodAsync();
}
Run Code Online (Sandbox Code Playgroud)
我最初写的是前者,但是不能再看到添加等待的重点了.如果我要编写后者,我会完成同样的事情,两个方法的调用者仍然可以使用await关键字,如果他们选择,不是吗?
上面有什么不同吗?哪个更好"?
相当简单的问题:
我的课上有一个init方法,可能会出错.如果确实如此,我打算"返回nil",但我还想返回一个错误.在init方法中使用NSError**参数是不好的做法吗?我的方法声明如下所示:
- (id) initWithArgs:(NSString*) args andError:(NSError**)error;
Run Code Online (Sandbox Code Playgroud)
非常感谢,尼克
我有一个DTO类,例如,看起来像这样:
public class ExampleDto
{
[DataMember(Name = "Date", IsRequired = true, Order = 1), Required]
public DateTime Date { get; set; }
[DataMember(Name = "ParentExample", IsRequired = false, Order = 2, EmitDefaultValue = false)]
public Guid? ParentExampleId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
例如,如果用户提供的日期不正确,例如:
<?xml version="1.0" encoding="UTF-8" ?>
<ExampleDto xmlns="http://customurl/">
<Date>2012-05-25T18:23:INCORRECTDATE</Date>
<ParentExample>B62F10A8-4998-4626-B5B0-4B9118E11BEC</ParentExample>
</ExampleDto>
Run Code Online (Sandbox Code Playgroud)
或者只是一个空体,然后传递给动作的ExampleDto参数将为null(在前一种情况下,ModelState将有错误).
我将一个CustomValidationAttribute应用于该类,因此类声明如下所示:
[CustomValidation(typeof(CustomExampleValidator), "Validate")]
public class ExampleDto
Run Code Online (Sandbox Code Playgroud)
现在我添加了这个,如果ExampleDto参数为null(由于空体或序列化问题),则抛出ArgumentNullException:
<?xml version="1.0" encoding="UTF-8"?>
<Response xmlns="http://customurl" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Type>Failure</Type>
<Message>An unknown error has occurred</Message>
<Errors>
<Error>
<Message>System.ArgumentNullException</Message>
<MessageDetail>Value cannot be null. Parameter …Run Code Online (Sandbox Code Playgroud) 我创建了作为Web服务接口的对象.一个典型的对象是"TaskService".当客户端使用其中一个对象时,它会调用其中一个服务的方法(例如"GetTasks"),并且该服务将异步关闭以调用远程Web服务,并通过委托回发检索到的数据.
目前,要使用这些服务之一,您必须使用[[TaskService alloc] init]创建它,但我认为将每个服务转换为单个对象更有意义.
看到包含对委托的引用的单例对象是否常见?我设计的主要问题是每个对象,无论何时需要使用特定服务,都必须在调用服务之前将自己设置为委托,这对我来说似乎不太合适......如果另一个对象怎么办?是否将自己设置为代理并调用服务?
提前谢谢了!
问候,尼克
我的解决方案有多个项目(以及子目录),每个项目文件夹中都有一个"bin"文件夹.
我正在尝试在MSBuild脚本中创建一个包含所有这些目录的ItemGroup.
我认为这就足够了,但它不包含任何东西:
<ItemGroup>
<BinDirs Include="**\bin" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我不确定为什么这不起作用.任何人都可以指出我正确的方向来实现我想要做的事情吗?
问候,尼克
我很难确定如何在SQL Server中使用xml数据列,特别是与Entity Framework一起使用.
基本上,我们的一个表存储用户以XML形式提供的"自定义元数据",因此将其存储在表中的Xml列中似乎是明智的.
但是,我们的应用程序的一个要求是支持搜索元数据.用户能够提供XPath查询字符串以及用于比较XPath值的值,以搜索包含与其查询匹配的元数据的元素.
我确定SQL Server xml函数是理想的(例如,[xmlcol] .exist('/ path1/path2 [0] [text()=''valuetest''']),但实体不支持它们框架,恼人地(或者特别是,不支持xml列).作为替代方案,我尝试创建一个UDF,将用户提供的XPath传递给xml函数,但后来发现xml函数只允许字符串文字,所以我无法提供变量......
此时,我的选项已经用完了.
我创建了一小段代码,在IQueryable.ToString()的结果上执行正则表达式替换,将XPath过滤器注入,然后手动将此字符串发送到数据库,但是这也存在问题,例如例如,结果似乎没有懒惰地加载导航属性.
我一直在寻找,偶然发现了SQLCLR类型的想法,并开始创建一个执行XPath比较的SQLCLR函数.我认为此时我已成为赢家,直到一位同事指出Azure中的SQL Server不支持SQLCLR - doh!
我还有其他选择吗?我好像跑得很近......
几个星期前我开始使用objective-c和iOS(值得记住),我提前为这个糟糕的图表道歉!

上图显示了我对Web服务的调用结构.细箭头表示创建另一个对象的对象,而粗箭头表示持有对指向对象的强(保留)引用的对象.
我相信这包含所谓的"循环引用",并且在解除分配对象时会产生问题.
我明白,简单的答案就是取代一些强弱的弱引用,我喜欢这样做,除了我的项目也针对iOS 3.2(不是我的决定 - 我不能真正改变这个事实!) .所以,我认为我说我必须使用__unsafe_unretained,但我非常担心这些不会自动归零,因为当对象被释放时我最终会遇到EXC_BAD_ACCESS问题. ..
所以我的问题首先是我有循环引用.要解决,我将不得不使用__unsafe_unretained,这导致我的第二个问题:如何正确管理这些?
可能与之相关的问题是:NSURLConnection如何管理它的强引用?我从各种渠道获悉,它保留了代表团吗?所以...如果我保留一个NSURLConnection,(也是它的代表)并保留我,这也是一个循环引用,不是吗?它是如何解决我的问题的?
任何建议都非常欢迎!
问候,尼克
我正在尝试将名称列表复制到SQL Server表中,我为其设置了Entity Framework项目.
名称列表具有重复值,并且其中几个在其末尾具有空格.我希望只插入表中尚未存在的名称,以及从它们的末尾修剪空格.看起来相当简单吧?
我的解决方案是:
if (!context.Names.Any(n => n.Value == nameToCopy.Trim())
context.Names.Add(nameToCopy.Trim())
Run Code Online (Sandbox Code Playgroud)
NB.这不是我的确切代码,只是一个例子,所以不需要提到我正在修剪两次!
令我惊讶的是,上述方法并不像我预期的那样有效.我发现,同时剖析了上述说法,认为if (!context.Names.Any(n => n.Value == nameToCopy.Trim())实际上并没有查询nameToCopy的修剪版本-几个查询名字对他们的这些末端空间.
但是,如果我执行以下操作,则按预期工作:
string trimmedName = nameToCopy.Trim()
if (!context.Names.Any(n => n.Value == trimmedName)
context.Names.Add(trimmedName)
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么第一个解决方案不在数据库查询中使用剪裁版本的字符串?
谢谢
我有一个简单的方法:
private IEnumerable<OrderResult> SubmitOrders(IEnumerable<OrderItem> items)
{
ConcurrentBag<OrderResult> results = new ConcurrentBag<OrderResult>();
Parallel.ForEach(items, item =>
{
OrderResult result = SubmitOrder(item);
results.Add(result);
});
return results;
}
Run Code Online (Sandbox Code Playgroud)
为了添加更多上下文,如果订单提交成功,SubmitOrder(item)上面引用的方法会将对象的Sent( DateTime?) 属性更改为 。itemDateTime.Now
在循环内Parallel.ForEach, after SubmitOrder(item),我可以看到该Sent属性已正确更新。
但是,如果我检查传入参数中的对象items,则没有任何Sent属性被更新。就好像传递到Parallel.ForEach循环中的项目不是原始items集合中的项目。
为什么是这样?如果传入集合中的对象在循环中被修改,我预计更改会反映在原始集合中的项目中,但事实似乎并非如此。
objective-c ×4
.net ×3
c# ×2
sql-server ×2
async-await ×1
delegates ×1
ienumerable ×1
init ×1
ios ×1
itemgroup ×1
memory-leaks ×1
msbuild ×1
nserror ×1
singleton ×1
strdup ×1
string ×1
trim ×1
xpath ×1