Objective-C属性默认为atomic,它确保访问器是原子的,但不能确保整体线程安全性(根据这个问题).我的问题是,在大多数并发场景中,原子属性是不是多余的?例如:
场景1:可变属性
@interface ScaryMutableObject : NSObject {}
@property (atomic, readwrite) NSMutableArray *stuff;
@end
void doStuffWith(ScaryMutableObject *obj) {
[_someLock lock];
[obj.stuff addObject:something]; //the atomic getter is completely redundant and could hurt performance
[_someLock unlock];
}
//or, alternatively
void doStuffWith(ScaryMutableObject *obj) {
NSMutableArray *cachedStuff = obj.stuff; //the atomic getter isn't redundant
[_someLock lock];
[cachedStuff addObject:something]; //but is this any more performant than using a nonatomic accessor within the lock?
[_someLock unlock];
}
Run Code Online (Sandbox Code Playgroud)
场景2:不可变属性
我在想,在处理不可变对象时,原子属性可能对避免锁有用,但由于不可变对象可以指向Objective-C中的可变对象,所以这并没有多大帮助:
@interface SlightlySaferObject : NSObject …Run Code Online (Sandbox Code Playgroud) 我在〜/ .bashrc中有以下bash函数
function gitlab {
MSG='first commit'
CMD="git commit -m '${MSG}'"
echo $CMD
$CMD
}
Run Code Online (Sandbox Code Playgroud)
这是结果
$ gitlab
git commit -m 'first commit'
error: pathspec 'commit'' did not match any file(s) known to git.
Run Code Online (Sandbox Code Playgroud)
有什么问题?
你好,
这是一些将数据类写入文件的代码,然后检查文件是否存在.我可以看到该文件存在于模拟器上,但file.exists()因此saveStateAvailable()返回false.
private void saveStateFile() {
/*DEBUG*/Log.d(this.getClass().getName(), "saveStateFile: Started");
mGameData = getGameData();
try {
FileOutputStream fileoutputstream = openFileOutput(mGameData.pilotName + STATE_FILE_EXTENSION, Context.MODE_WORLD_WRITEABLE);
ObjectOutputStream objectoutputstream;
objectoutputstream = new ObjectOutputStream(fileoutputstream);
objectoutputstream.writeObject(mGameData);
objectoutputstream.close();
fileoutputstream.close();
/*DEBUG*/Log.i(this.getClass().getName(), "saveStateFile: State saved to "+mGameData.pilotName + STATE_FILE_EXTENSION);
} catch (IOException e) {
/*DEBUG*/Log.e(this.getClass().getName(), "saveStateFile: Error writing data state file, "+mGameData.pilotName + STATE_FILE_EXTENSION);
e.printStackTrace();
}
/*DEBUG*/Log.d(this.getClass().getName(), "saveStateFile: Finished stateFileAvailable="+stateFileAvailable());
}
private boolean stateFileAvailable() {
File file = new File(mGameData.pilotName + STATE_FILE_EXTENSION);
/*DEBUG*/Log.d(this.getClass().getName(), "stateFileAvailable: Called ("+mGameData.pilotName + STATE_FILE_EXTENSION+" exists = "+file.exists()+")"); …Run Code Online (Sandbox Code Playgroud) 我有以下问题:
当我从项目加载资源时一切正常,但当我把它放在.jar上并尝试加载时我得到一个异常.
代码是:
InputStreamReader reader =
new InputStreamReader(
this.getClass().getResource(fileName).openStream())
CsvReader stream = new CsvReader(reader);
try {
while (stream.readRecord()) {
line = stream.getRawRecord();
//DO SOMETHING...
}
}catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
} finally {
stream.close();
}
Run Code Online (Sandbox Code Playgroud)
而stackTrace是:
Inflater has been closed java.lang.NullPointerException: Inflater has been closed
at java.util.zip.Inflater.ensureOpen(Inflater.java:364)
at java.util.zip.Inflater.inflate(Inflater.java:237)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:135)
at java.io.FilterInputStream.read(FilterInputStream.java:116)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at utils.csvreader.CsvReader.checkDataLength(CsvReader.java:1198)
at utils.csvreader.CsvReader.readRecord(CsvReader.java:604)
Run Code Online (Sandbox Code Playgroud)
问题发生了stream.getRawRecord().我也尝试使用BufferedReader,结果相同readLine();
有任何想法吗?
我试图让我的mvc应用程序中的控制器在用户点击编辑按钮后从数据模型编辑特定实体,但我似乎无法使其工作.我一直收到这个错误
传递到字典中的模型项的类型为'System.Data.Objects.ObjectQuery`1 [MvcApplication1.Models.New]',但此字典需要类型为"MvcApplication1.Models.New"的模型项.
我做错了什么 是由于强类型视图?
这是我的控制器:
public ActionResult Edit(int id)
{
var productToEdit = from s in _entities.NewSet // return the story matching the clicked id
where s.storyId == id
select s;
return View(productToEdit);
}
// POST : Edit
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(New productToEdit)
{
try
{
var originalNews = (from s in _entities.NewSet
where s.storyId == productToEdit.storyId
select s).FirstOrDefault();
_entities.ApplyPropertyChanges(originalNews.EntityKey.EntitySetName, productToEdit);
_entities.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以给我一些指示.我还是新手.
我知道准备好的语句,但如果我使用原始SQL,ActiveRecord是否有办法手动转义值?
像这样的东西会很好:
self.escape("O'Malley") # O\'Malley
Run Code Online (Sandbox Code Playgroud) 有人可以给我看一个示例SQL服务器脚本,我可以看看它使用"With Clause"吗?
我试图使用此子句迭代200个数据库,这些数据库包含我尝试运行查询的同一个表.我试图避免使用游标,因为查询时间太长以及使用while循环.
有人可以告诉我我能做什么.
谢谢.
我一直在做这个问题,并征求你的意见.
我正在构建一个应用程序,其功能的一部分是呈现PDF表单; 意思是显示它们,允许更改字段并将修改后的PDF文件保存回来.UIWebViews不支持PDF交互表单.
使用CGPDF apis(并从此处和其他地方发布的其他问题中获益),我当然可以呈现PDF(没有表单字段/小部件),扫描并找到文档中的字段,找出屏幕上绘制内容的位置和让他们互动.
我似乎无法弄清楚如何更改CGPDFDictionary对象并将它们写回文件.可以使用CGPDF Apis从整个布料创建新的PDF文档,但是如何使用它来修改现有文件?
我应该寻找其他地方,如PoDoFo或libHaru 等第三方PDF库吗?
我很乐意听到任何成功修改过PDF并将其写回来的方法.
这就是我目前在登录页面上创建会话的工作.
if($count==1) {
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
}
Run Code Online (Sandbox Code Playgroud)
我知道这是非常基本的,我需要保护用户会话.你能给我一些基本的建议吗?如果您可以编辑代码并编写安全代码,那就太棒了.谢谢.
目前,我使用电子邮件地址作为会话用户名.
在过去,我已经用C++编程语言创建了DirectX应用程序,但是,我想知道是否可以使用C编程语言来实现这一点.
谢谢.
android ×1
asp.net-mvc ×1
bash ×1
c ×1
cocoa ×1
directx ×1
inputstream ×1
ios ×1
iphone ×1
jar ×1
java ×1
objective-c ×1
php ×1
podofo ×1
properties ×1
security ×1
session ×1
xcode ×1