我是iOS开发的新手,从未处理过手动引用计数(保留,释放,自动释放).因此,我对ARC的神奇表现并不了解.
我想我明白,直到有人问我是什么所有制类型(weak,strong,assign应给予一个只读属性的对象指向,如,等):
@property (readonly,nonatomic) NSString* name;
Run Code Online (Sandbox Code Playgroud)
我读到这里
关于ARC只读@property问题,离开关strong/ weak不实际编译除非你指定了后备变量时,你@synthesize的财产; 我恰巧正在指定这样的支持ivar:
@synthesize name = _name;
Run Code Online (Sandbox Code Playgroud)
现在我明白变量的默认'生命周期限定符'很强,从这里开始:http://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/DOC/UID/TP40011226-CH1-SW4
所以简而言之 - 我间接地定义了我的财产,(readonly,nonatomic,strong)因为_nameivar被隐含地声明为__strong.
我有几个问题:
是否strong使用正确的终身限定符?我认为它是,否则支持我的对象NSString*将不会被拥有在任何地方,因此将自动释放(来自Java领域这是有道理的,因为默认情况下所有引用都很强).
在这种情况下是否还有其他修饰符,例如copy或assign?
声明财产是否(readonly,nonatomic,strong)与消耗财产(readonly,nonatomic)的代码有任何区别?例如.并宣布它不关键字导致待存储的对象作为指针,其中属性将被存储在一个指针?strong__unsafe_unretainedstrong__strong
谢谢!
编辑
据我所知,以下适用于readonly属性:
(readonly, assign).(readonly, strong)或(readonly, copy)- 这些函数与readonly属性相同,但如果扩展/子类并将属性重新声明为,则可能需要复制语义readwrite.(readonly, …properties object objective-c readonly automatic-ref-counting
我在C++程序中使用pthread_mutex_t,如下所示:
class Mutex : public noncopyable
{
public:
Mutex()
{
pthread_mutex_init(&m_mutex, NULL);
}
void acquire()
{
pthread_mutex_lock(&m_mutex);
}
void release()
{
pthread_mutex_unlock(&m_mutex);
}
private:
pthread_mutex_t m_mutex;
};
Run Code Online (Sandbox Code Playgroud)
(该课程不可复制 - http://www.boost.org/doc/libs/1_53_0/boost/noncopyable.hpp)
的事情,我不明白-是它认为是错误的,以不调用pthread_mutex_destroy析构函数中?我读过的文档没有声明必须调用destroy.
有谁知道,pthread_mutex_destroy实际做了什么以及在什么条件下需要它?
编辑
答案pthread_mutex_destroy也适用于pthread_cond_destroy等等吗?它们对我来说似乎几乎没用,除非pthread_mutex_initet.人.分配内存?(对我来说,文档对此并不完全清楚.)
无论如何都要打破毁坏并没有伤害我,所以这个问题主要是学术问题.
无论如何,在linux上,似乎destroy只会将互斥锁设置为无效状态:
int
__pthread_mutex_destroy (mutex)
pthread_mutex_t *mutex;
{
if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
&& mutex->__data.__nusers != 0)
return EBUSY;
/* Set to an invalid value. */
mutex->__data.__kind = -1;
return 0;
} …Run Code Online (Sandbox Code Playgroud) 是否可以有一个助理编辑器(例如我的第二台显示器上),它总是显示我正在编辑的文件的对应部分(在我的第一台显示器上)?
我可以创建一个新选项卡,将其拖到自己的窗口并显示助理编辑器,但当然它不会显示我在主窗口/监视器上编辑的文件的对应部分.
有没有办法让它这样做?
我正在尝试使用 C# .NET 和常规 Windows 窗体(不是 WPF)制作每个监视器 DPI 感知应用程序。
我理解选择加入每台显示器 DPI 支持的概念,并在清单中做到了这一点:
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">True/PM</dpiAware>
</windowsSettings>
</application>
Run Code Online (Sandbox Code Playgroud)
当我选择这样做时,当我的应用程序从 96DPI 监视器(我的默认监视器)拖到 144DPI …
我正在练习一些c ++(试图离开Java),我偶然发现了这个恼人的错误:错误:没有操作符<<匹配这些操作数.我在这个网站上搜索了一个明确的答案,没有运气,我确实发现我不是唯一一个.
这个错误出现在我的.cpp文件中,还有其他错误,但我现在不介意他们.
void NamedStorm::displayOutput(NamedStorm storm[]){
for(int i = 0; i < sizeof(storm); i++){
cout << storm[i] << "\n";
}
}
Run Code Online (Sandbox Code Playgroud)
有些东西与"<<"有关,我不知道最近会发生什么.