我正在开发一个iPhone应用程序,它将在运行时构造一个NSMutableDictionary,其值(键值对)将是NSMutableArrays.作为Objective-C的新手,我担心以下会导致内存泄漏:
- (void) addNewSupplierPhoto:(UIImage*)image toSupplierID:(NSInteger*) supplierID{
NSMutableArray* supplierPhotoArray = [supplierPhotos objectForKey:supplierID];
if(supplierPhotoArray == nil)
{
supplierPhotoArray = [[NSMutableArray alloc] init];
[supplierPhotos setObject:supplierPhotoArray forKey:supplierID];
[supplierPhotoArray release];
}
}
Run Code Online (Sandbox Code Playgroud)
supplierPhotos是一个NSMutableDictionary,它是包含类的成员变量.
如您所见,当我接受新的UIImage*放入结构时,我首先检查对应于第二个参数(supplierID)的键值对的对象是否为nil.如果它是nil,我分配一个新的NSMutableArray并将其设置为该键的对象,然后释放它.假设我在包含此方法的类的dealloc中释放NSMutableDictionary,是否会释放引用?在释放NSMutableDictionary之前,我是否需要运行它并释放包含在其中的各个NSMutableArrays?
谢谢,
本B.
我有一个现有的JPA(EclipseLink)项目,其中所需的行为是,如果在实体的字段中给出空值,则不应该保留该空值.
用例是我们可以从外部源获得对这些实体的多个部分更新.这些来源可能会给我们一个空值,这并不意味着"使这个领域无效",这意味着"我没有这个价值".
是否有注释,模式或其他工具可用于在setter中自动执行null检查或告诉JPA不保持空值????
我可以在每个实体中查看每个setter并添加,if(val != null) { //set the value } 但这是乏味和重复的.
例如,我们有:
@Entity
@Table(name = "my_table")
public class MyObject {
@Column
private String myColumn;
public String getMyColumn() {
return this.myColumn;
}
public void setMyColumn(String val) {
this.myColumn = val;
}
}
Run Code Online (Sandbox Code Playgroud)
我想有一些自动帮助的东西:
@Entity
@Table(name = "my_table")
public class MyObject {
@Column
@DontPersistIfNull
private String myColumn;
public String getMyColumn() {
return this.myColumn;
}
public void setMyColumn(String val) {
this.myColumn = val;
}
}
Run Code Online (Sandbox Code Playgroud)
或这个:
@Entity
@Table(name = "my_table")
public …Run Code Online (Sandbox Code Playgroud) 我试图在WPF中使用带有验证规则的数据绑定控件的验证输入.在wpf窗口的代码隐藏文件中,我有一个类:
public class posintValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
string _strInt = value.ToString();
int _int = -1;
if (!Int32.TryParse(_strInt, out _int))
return new ValidationResult(false, "Value must be an integer");
if (_int < 0)
return new ValidationResult(false, "Value must be positive");
return new ValidationResult(true, null);
}
}
Run Code Online (Sandbox Code Playgroud)
在XAML中还有一个样式错误模板.
当我在XAML中放入带验证的文本框时:
<TextBox.Text>
<Binding Path="seconds" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:posintValidationRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
Run Code Online (Sandbox Code Playgroud)
我得到一个编译时错误: ''local'是一个未声明的命名空间.XML无效.
我应该如何local:posintValidationRule在我的XAML中声明?
我已经尝试了许多不同的方法将所选项目传递到多选列表而没有运气.最后,我尝试了这个,我认为应该显示所有选中的项目,但仍然没有选择列表中的任何内容.
public MultiSelectList Companies { get; private set; }
Companies = MulitSelectList(subcontractRepository.SubcontractCompanies(Subcontract.subcontract_id), "Value", "Text");
Run Code Online (Sandbox Code Playgroud)
在SubcontractRepository.cs中:
public IEnumerable<SelectListItem> SubcontractCompanies(Guid id)
{
return c in db.companies
select new SelectListItem
{
Text = c.company_name,
Value = c.company_id.ToString(),
Selected = true
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中:
<p>
<label for="Companies">Company:</label>
<%= Html.ListBox("Companies", Model.Companies) %>
<%= Html.ValidationMessage("Companies", "*") %>
</p>
Run Code Online (Sandbox Code Playgroud) 我注意到,当我Response.Redirect到.aspx页面时,它有时会显示一个缓存页面而不是实际执行页面并从数据库中提取新数据.
我没有在这里使用输出缓存或任何特殊的东西 - 这是一个CRM,缓存要么在客户端发生,要么更有可能在IIS中自动发生.
顺便说一下,从来没有涉及过查询.我通过会话传递密钥.我知道如果我使用查询字符串它可能会部分绕过缓存问题,但在这种情况下它不是一个选项,无论如何我真正想要的是更深入地了解正在发生的事情.
我做了一点挖掘,有些人通过使用Server.Transfer(其实际行为与Response.Redirect不同,并且一些细节并不总是可取的)来解决这个问题,并且其他一些人说要设置Response.Cache.SetCacheability( HttpCacheability.NoCache)在我要避免缓存的页面上.
我希望更好地了解这里发生的事情,并且可能是最佳实践 - 首先,我认为.aspx页面总是被标记为避免缓存.对?
有什么想法吗?
我是iPhone开发的新手,我有这个内存泄漏.
我使用NSMutableArray来检索位于Documents目录中的.plist文件的内容.
我第一次使用它,一切都很顺利,但如果我多次调用它,我会得到内存泄漏.
这是我的代码:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//make a file name to write the data to using the
//documents directory:
fullFileName = [NSString stringWithFormat:@"%@/SavedArray", documentsDirectory];
//retrieve your array by using initWithContentsOfFile while passing
//the name of the file where you saved the array contents.
savedArray = nil;
savedArray = [[NSMutableArray alloc] initWithContentsOfFile:fullFileName];
self.composedArray = [savedArray copy];
[savedArray release];
[self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
每次视图消失时我都会释放它
- (void)viewWillDisappear:(BOOL)animated {
[super …Run Code Online (Sandbox Code Playgroud) 当我在CSS或javascript中应用行高时,它不会这样做.如果我在脚本中应用,我会收到以下错误.
Error: missing : after property id
Line: 26, Column: 44
Source Code:
Cufon.replace('#header .lists li a', {line-height: '120%;', font-size: '120%'});
Run Code Online (Sandbox Code Playgroud)
JavaScript的
$(document).ready(function()
{
Cufon.replace('#header .lists li a', {line-height: '120%;', font-size: '120%'});
});
Run Code Online (Sandbox Code Playgroud)
style.css文件
#header .lists { float:left; position:relative; width:776px; height:40px; list-style:none; padding:0; margin:0; margin-top:1px; background:url(../images/bg_mainmenu_off.gif); z-index:100; }
#header .lists li {float:left; height:40px; display:inline; background:url(../images/bg_mainmenu_off.gif) repeat-x;}
#header .lists li a {display:block; width:150px; height:40px; line-height:40px; text-decoration:none; font-size:16px; font-weight:bold; text-indent:10px; font-weight:bold; color:#FFFFFF; margin: 0px; }
#header .lists li a:hover { background:url(../images/bg_mainmenu_on.gif) repeat-x; …Run Code Online (Sandbox Code Playgroud) 考虑以下在latex中直接实现列表:
\newcommand{\add@to@list}[2]{%
\ifx#2\@empty%
\xdef#2{#1}%
\else%
\xdef#2{#2,#1}%
\fi%
}%
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种简单的方法来实现一个集合(没有重复元素的列表)?
我需要将MDB中的所有对象导出到文件夹中的文本文件,然后使用一些VBA代码将这些文本文件作为新的Access对象导入到全新的MDB中.
有人有这个的源代码吗?我知道它存在于某处,我现在无法找到它.
我正在将一些Linq扩展到SQL类.我有两个类似的语句,第一个工作,第二个没有("没有支持转换为SQL"错误).
var reg2 = rs.ProductRegistrations().SingleOrDefault(p => p.Product.product_name == "ACE")
var reg5 = rs.ProductRegistrations().SingleOrDefault(p => p.product_name == "ACE");
Run Code Online (Sandbox Code Playgroud)
阅读此链接后LINQ:没有翻译到SQL
我理解(我认为),基本上所有东西都需要"内联",否则无法正确计算表达式树.第一个示例直接访问LinqToSql EntitySet"Product"(保持所有内联),而第二个示例使用如下定义的属性:
public partial class ProductRegistration :IProduct
{
public string product_name
{
get { return this.Product.product_name; }
}
}
Run Code Online (Sandbox Code Playgroud)
我假设我的问题是LinqToSql无法翻译.
我如何将"财产"变成等同的陈述?我知道我需要使用System.Linq.Expressions.Expression,但我尝试的一切都不起作用(有些甚至不编译).也许我应该创建一个Extension方法(使用Expression),然后从属性中调用它?属性可以调用扩展方法吗?
下面的事情不起作用:
public static System.Linq.Expressions.Expression<Func<IProduct, bool>> ProductName2 (string pname)
{
return (p => p.product_name == pname);
}
Run Code Online (Sandbox Code Playgroud)
最重要的是,我知道我需要将我的访问方法包装在"Expression <....>"中,但我不知道如何从属性中访问它,以便上面的"reg5"变量可以正常工作.
如果有一些魔法属性可以添加到属性中以"自动表达"属性并使LinqToSql满意,而不是将其包装在Expression <...>中,那将会很棒
很想能够做到这一点......
public partial class ProductRegistration :IProduct
{
[Auto-Expression]
public string product_name
{
get { return this.Product.product_name; }
} …Run Code Online (Sandbox Code Playgroud) c# ×2
linq-to-sql ×2
memory-leaks ×2
annotations ×1
arrays ×1
asp.net ×1
asp.net-mvc ×1
caching ×1
cocoa ×1
css ×1
dictionary ×1
fonts ×1
iis ×1
iphone ×1
java ×1
jpa ×1
jquery ×1
latex ×1
list ×1
memory ×1
ms-access ×1
multi-select ×1
namespaces ×1
set ×1
validation ×1
vb.net ×1
wpf ×1
xaml ×1