小编Ele*_*zar的帖子

使用带有Xcode 4.2的Objective-C ARC时,如何防止对象被释放?

ETA:通过分析应用程序获得更多信息,查看底部.

我有一个iPhone应用程序,我刚刚转换为使用ARC,现在我因为僵尸对象而得到了几个错误.在我切换之前,我手动保留它们,一切都很好.我无法弄清楚为什么ARC没有保留它们.对象声明为强属性,并使用点表示法引用.这种情况发生在几个地方,所以我认为我必须对某处的ARC /内存管理有一个基本的误解.

这是一个特别令人沮丧的例子.我有一个3个对象的NSMutableArray.每个对象都有一个属性,它也是一个NSMutableArray,在这种情况下总是有一个对象.最后,该对象具有释放的属性.它令人沮丧的原因是它只发生在原始数组中的第3个对象.前两个对象总是很好.对于我来说,当以相同方式创建和使用的相似对象的相同属性不是这样时,如何释放一个对象的属性是没有意义的.

该数组作为属性存储在UITableViewController上:

@interface GenSchedController : UITableViewController <SectionHeaderViewDelegate>

@property (nonatomic, strong) NSArray *classes;

@end

@implementation GenSchedController

@synthesize classes;
Run Code Online (Sandbox Code Playgroud)

存储在classes数组中的对象定义为:

@interface SchoolClass : NSObject <NSCopying, NSCoding>

@property (nonatomic, strong) NSMutableArray *schedules;

@end

@implementation SchoolClass

@synthesize schedules;
Run Code Online (Sandbox Code Playgroud)

存储在schedules数组中的对象定义为:

@interface Schedule : NSObject <NSCopying, NSCoding>

@property (nonatomic, strong) NSMutableArray *daysOfWeek;

@implementation Schedule

@synthesize daysOfWeek;
Run Code Online (Sandbox Code Playgroud)

daysOfWeek是什么被释放.它只包含几个NSStrings.

我可以看到,在那期间viewDidLoad所有物体都很好,没有僵尸.但是,当我点击其中一个表格单元格并在第一行设置断点时tableView:didSelectRowAtIndexPath:,它已经被释放.抛出错误的特定行是在@synthesize daysOfWeek;下面的第3个"for"循环之后调用的:

for (SchoolClass *currentClass in self.classes) {
    for (Schedule *currentSched in currentClass.schedules) {
        for …
Run Code Online (Sandbox Code Playgroud)

xcode memory-management objective-c ios automatic-ref-counting

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

在ASP.NET 4.5中,我应该如何编码要用作JavaScript变量的字符串,以防止XSS攻击

我知道有几种方法可以做到这一点,但它们都有一些缺点.是否有"接受"的方式,这被认为是最好的?

我以前使用的Microsoft.Security.Application.AntiXss.JavaScriptEncode()是很棒的,但AntiXSS已经结束了,因为编码器现在包含在4.5中的.NET中.

但是,由于某种原因,System.Web.Security.AntiXss.AntiXssEncoder不包括该JavaScriptEncode方法.

System.Web.HttpUtility.JavaScriptStringEncode(),但它使用黑名单方法进行编码,因此它不太可能像白名单编码器一样好.

我已经看到了一些使用的建议System.Web.Script.Serialization.JavaScriptSerializer.Serialize(),但这只是打电话HttpUtility.JavaScriptStringEncode().

那么目前用于编码作为JS变量编写的值的最佳接受白名单方法是什么?

javascript asp.net xss antixsslibrary

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