我对JavaScript的delete
运算符有点困惑.采取以下代码:
var obj = {
helloText: "Hello World!"
};
var foo = obj;
delete obj;
Run Code Online (Sandbox Code Playgroud)
在执行了这段代码之后,obj
是null
,但foo
仍然指的是一个完全相同的对象obj
.我猜这个对象是foo
指向的同一个对象.
这让我很困惑,因为我期望写作delete obj
删除了obj
指向内存的对象- 而不仅仅是变量obj
.
这是因为JavaScript的垃圾回收工作在保留/释放的基础,所以,如果我没有指向对象的任何其他变量,它会从内存中清除?
(顺便说一句,我的测试是在Safari 4中完成的.)
javascript garbage-collection pointers memory-management object
在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在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
/ which
properties设置为0
,而不是115
.
有谁知道如何在Safari中可靠地创建和发送键盘事件?(如果可能的话,我宁愿用纯JavaScript实现它.)
JavaScript是否有像PHP addslashes
(或addcslashes
)函数这样的内置函数来向需要在字符串中转义的字符添加反斜杠?
例如,这个:
这是一个带有"单引号"和"双引号"的演示字符串.
...会成为:
这是一个带有"单引号"和"双引号"的演示字符串.
我对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)
由于其他对象需要操作我们的实例name
和items
实例变量,我们使用@property
/ @synthesize
为它们生成访问器/ 更改器.在我们的类中,我们不使用访问器/ mutator - 我们只是直接与实例变量交互.
something
只是我们将在我们的类中使用的实例变量,并且由于没有其他人需要使用它,我们不会为它创建一对访问器和变换器.
我们需要在UI中与文本字段进行交互,因此我们声明了IBOutlet
它,连接它,我们就完成了.
都很合乎逻辑.
然而,在iPhone世界中,事情似乎有所不同.人们声明属性,为每一个实例变量,用于声明属性IBOutlets
,并使用存取/存取器与实例变量相互作用中的类别(例如,他们会写[self setName:@"Test"]
,而不是name = @"Test"
).
为什么?到底是怎么回事?这些差异是否与iPhone有关?为所有实例变量声明属性,为IBOutlets
自己的类声明属性以及在自己的类中使用访问器/变换器有什么好处?
这是来自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
都引用相同的实例变量.
有谁知道如何包装文本UITextField
?我在Xcode中使用Cocoa/Objective-C作为我的iPhone项目,我似乎找不到办法做到这一点......
当然这是一个简单的问题,但我无法解决它,有人可以帮助我吗?
这是原始的一行
$('.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) 在我的头文件中,我有这个代码:
@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 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
cocoa-touch ×5
javascript ×5
objective-c ×4
cocoa ×2
iphone ×2
backslash ×1
coding-style ×1
css ×1
declaration ×1
dom-events ×1
escaping ×1
jquery ×1
nsarray ×1
object ×1
performance ×1
pointers ×1
properties ×1
quotes ×1
safari ×1
string ×1
uitextfield ×1
uitoolbar ×1
variables ×1
webkit ×1
word-wrap ×1
xcode ×1