小编Way*_*oda的帖子

使用ARC为ios声明readonly属性的正确方法是什么

我是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.

我有几个问题:

  1. 是否strong使用正确的终身限定符?我认为它是,否则支持我的对象NSString*将不会被拥有在任何地方,因此将自动释放(来自Java领域这是有道理的,因为默认情况下所有引用都很强).

  2. 在这种情况下是否还有其他修饰符,例如copyassign

  3. 声明财产是否(readonly,nonatomic,strong)消耗财产(readonly,nonatomic)的代码有任何区别?例如.并宣布它不关键字导致待存储的对象作为指针,其中属性将被存储在一个指针?strong__unsafe_unretainedstrong__strong

谢谢!

编辑

据我所知,以下适用于readonly属性:

  • 对于非NSObject*类型(int,float,void*等)使用(readonly, assign).
  • 对于对象指针,使用(readonly, strong)(readonly, copy)- 这些函数与readonly属性相同,但如果扩展/子类并将属性重新声明为,则可能需要复制语义readwrite.
  • 对于对象指针,(readonly, …

properties object objective-c readonly automatic-ref-counting

16
推荐指数
2
解决办法
9190
查看次数

是否有必要在互斥锁上调用pthread_mutex_destroy?

我在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++ posix mutex pthreads

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

如何在Mspgcc中声明中断处理程序(ISR)?

在mspgcc中声明中断处理程序的首选方法是什么?

msp430 mspgcc

8
推荐指数
2
解决办法
7199
查看次数

有没有办法将Xcode中的助理编辑器移植到自己的窗口或第二台显示器上

是否可以有一个助理编辑器(例如我的第二台显示器上),它总是显示我正在编辑的文件的对应部分(在我的第一台显示器上)?

我可以创建一个新选项卡,将其拖到自己的窗口并显示助理编辑器,但当然它不会显示我在主窗口/监视器上编辑的文件的对应部分.

有没有办法让它这样做?

xcode

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

EnableWindowsFormsHighDpiAutoResizing 设置在 C# .NET windows 窗体应用程序中有什么作用?

我正在尝试使用 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# winforms

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

错误:没有运算符<<匹配这些操作数?

我正在练习一些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)

有些东西与"<<"有关,我不知道最近会发生什么.

c++ operators

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