小编Ste*_*son的帖子

在JavaScript中删除对象

我对JavaScript的delete运算符有点困惑.采取以下代码:

var obj = {
    helloText: "Hello World!"
};

var foo = obj;

delete obj;
Run Code Online (Sandbox Code Playgroud)

在执行了这段代码之后,objnull,但foo仍然指的是一个完全相同的对象obj.我猜这个对象是foo指向的同一个对象.

这让我很困惑,因为我期望写作delete obj删除了obj指向内存的对象- 而不仅仅是变量obj.

这是因为JavaScript的垃圾回收工作在保留/释放的基础,所以,如果我没有指向对象的任何其他变量,它从内存中清除?

(顺便说一句,我的测试是在Safari 4中完成的.)

javascript garbage-collection pointers memory-management object

354
推荐指数
5
解决办法
36万
查看次数

在JavaScript中声明多个变量

在JavaScript中,可以声明多个这样的变量:

var variable1 = "Hello World!";
var variable2 = "Testing...";
var variable3 = 42;
Run Code Online (Sandbox Code Playgroud)

......或者像这样:

var variable1 = "Hello World!",
    variable2 = "Testing...",
    variable3 = 42;
Run Code Online (Sandbox Code Playgroud)

一种方法比另一种方法更好/更快吗?

javascript variables performance coding-style declaration

316
推荐指数
15
解决办法
27万
查看次数

在JavaScript中触发键盘事件

我正在尝试使用JavaScript在Safari中模拟键盘事件.

我试过这个:

var event = document.createEvent("KeyboardEvent");
event.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 115, 0);
Run Code Online (Sandbox Code Playgroud)

......还有这个:

var event = document.createEvent("UIEvents");
event.initUIEvent("keypress", true, true, window, 1);
event.keyCode = 115;
Run Code Online (Sandbox Code Playgroud)

但是,在尝试这两种方法之后,我遇到了同样的问题:在执行代码之后,事件对象的keyCode/ whichproperties设置为0,而不是115.

有谁知道如何在Safari中可靠地创建和发送键盘事件?(如果可能的话,我宁愿用纯JavaScript实现它.)

javascript safari webkit keyboard-events dom-events

73
推荐指数
4
解决办法
16万
查看次数

在JavaScript中转义字符串

JavaScript是否有像PHP addslashes(或addcslashes)函数这样的内置函数来向需要在字符串中转义的字符添加反斜杠?

例如,这个:

这是一个带有"单引号"和"双引号"的演示字符串.

...会成为:

这是一个带有"单引号"和"双引号"的演示字符串.

javascript string quotes escaping backslash

62
推荐指数
3
解决办法
12万
查看次数

Objective-C中的属性和实例变量

我对Objective-C中的属性和实例变量感到困惑.

我在Aaron Hillegass的"Mac OS X的可可编程"中走了一半,一切都是合乎逻辑的.你会声明一个这样的类:

@class Something;

@interface MyClass : NSObject {
    NSString *name;
    NSArray *items;

    Something *something;

    IBOutlet NSTextField *myTextField;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSArray *items;
Run Code Online (Sandbox Code Playgroud)
  • 由于其他对象需要操作我们的实例nameitems实例变量,我们使用@property/ @synthesize为它们生成访问器/ 更改器.在我们的类中,我们不使用访问器/ mutator - 我们只是直接与实例变量交互.

  • something 只是我们将在我们的类中使用的实例变量,并且由于没有其他人需要使用它,我们不会为它创建一对访问器和变换器.

  • 我们需要在UI中与文本字段进行交互,因此我们声明了IBOutlet它,连接它,我们就完成了.

都很合乎逻辑.

然而,在iPhone世界中,事情似乎有所不同.人们声明属性,为每一个实例变量,用于声明属性IBOutlets,并使用存取/存取器与实例变量相互作用的类别(例如,他们会写[self setName:@"Test"],而不是name = @"Test").

为什么?到底是怎么回事?这些差异是否与iPhone有关?为所有实例变量声明属性,为IBOutlets自己的类声明属性以及在自己的类中使用访问器/变换器有什么好处?

cocoa cocoa-touch properties objective-c instance-variables

55
推荐指数
2
解决办法
2万
查看次数

Objective-C - 何时使用'self'

这是来自Apple的iPhone"Utility Aplication"模板的未经修改的代码:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

 MainViewController *aController = [[MainViewController alloc] initWithNibName:@"MainView" bundle:nil];
 self.mainViewController = aController;
 [aController release];

 mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
 [window addSubview:[mainViewController view]];
 [window makeKeyAndVisible];

}
Run Code Online (Sandbox Code Playgroud)

mainViewController被分配到aController时,self被指定的关键字:

 self.mainViewController = aController;
Run Code Online (Sandbox Code Playgroud)

但是,mainViewController设置框架时,self不需要关键字:

 mainViewController.view.frame = [UIScreen mainScreen].applicationFrame;
Run Code Online (Sandbox Code Playgroud)

如果我self从第一个示例中删除关键字,程序将崩溃并显示以下消息:

objc[1296]: FREED(id): message view sent to freed object=0x3b122d0
Run Code Online (Sandbox Code Playgroud)

如果我将self关键字添加到第二个示例,程序运行正常.

任何人都可以解释为什么self在第一种情况下需要而不是第二种情况?我假设在两种情况下mainViewController都引用相同的实例变量.

iphone cocoa-touch objective-c

49
推荐指数
2
解决办法
2万
查看次数

在UITextField中换行文本?

有谁知道如何包装文本UITextField?我在Xcode中使用Cocoa/Objective-C作为我的iPhone项目,我似乎找不到办法做到这一点......

xcode cocoa-touch objective-c word-wrap uitextfield

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

使用jquery添加css字体颜色

当然这是一个简单的问题,但我无法解决它,有人可以帮助我吗?

这是原始的一行

$('.winning-col', this).text($('td.win', this).length);
Run Code Online (Sandbox Code Playgroud)

这就是我想出来的地方,当然不正确.

$('.winning-col', this).text.css('color', 'pink'($('td.win', this).length));
Run Code Online (Sandbox Code Playgroud)

javascript css jquery

10
推荐指数
3
解决办法
7万
查看次数

Xcode警告:"NSArray可能无法响应-addObject"

在我的头文件中,我有这个代码:

@interface TableViewController : UIViewController 
{
    IBOutlet UITableView *tblListData;
    NSArray *arryData;
}
Run Code Online (Sandbox Code Playgroud)

在我的类声明文件中,我有这个实现:

- (void)viewDidLoad 
{
    arryData = [[NSArray alloc] initWithObjects:@"iPhone",@"iPod",@"MacBook",nil];
    [super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)

现在我得到这个Xcode警告:NSArray may not respond to -addObject对于以下代码:

- (IBAction)AddButtonAction:(id)sender
{
    [arryData addObject:@"Mac Mini"];
    [tblListData reloadData];
}
Run Code Online (Sandbox Code Playgroud)

而且,果然,我NSArray没有回应addObject!:(

我该怎么办?

iphone cocoa cocoa-touch objective-c nsarray

8
推荐指数
1
解决办法
7138
查看次数

设置UINavigationController的工具栏项

在iPhone OS 3.0中,您可以使用该setToolbarItems:animated:方法设置UINavigationController的工具栏项.但是,这需要您传入一个UIToolbarItem数组.虽然我可以以编程方式创建这些工具栏项,但我宁愿在Interface Builder中创建它们.

考虑到这一点,我在"MyGreatViewController.xib"中创建了一个UIToolbar,并用想要的工具栏项填充它.然后,在"MyGreatViewController.m"中,我从工具栏中获取项目并将它们传递给setToolbarItems:animated::

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setToolbarItems: [toolbar items]];
}
Run Code Online (Sandbox Code Playgroud)

...在哪里toolbar是一个引用UIToolbar的IBOutlet.

这是一个好方法吗?有没有更好的方法来实现这一目标?我应该以编程方式创建项目吗?

cocoa-touch interface-builder uitoolbar uinavigationcontroller uitoolbaritem

7
推荐指数
2
解决办法
2万
查看次数