一个简单的问题.
如果我有一个属性和一个声明同名的ivar:
在.h文件中:
(Reminder*)reminder;
@property(nonatomic,strong)(Reminder*)reminder;
Run Code Online (Sandbox Code Playgroud)
在.m文件中,如果我使用ARC,我应该在init方法中使用ivar还是属性?
- (id)initWithReminder:(Reminder*)reminder_ {
self = [super init];
if (self) {
reminder = reminder_;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
或者我应该使用该属性来获得自动引用计数的好处,如下所示:
- (id)initWithReminder:(Reminder*)reminder_ {
self = [super init];
if (self) {
self.reminder = reminder_;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我不确定在对象的初始化中哪个点可以使用点表示法访问属性.
initialization reference-counting objective-c ios5 automatic-ref-counting
在使用模板时,我遇到了一个需要,可以从继承的类访问基类构造函数来创建对象,以减少复制/粘贴操作.我想通过using
关键字以与功能案例相同的方式做到这一点,但这不起作用.
class A
{
public:
A(int val) {}
};
class B : public A
{
};
class C : public A
{
public:
C(const string &val) {}
};
class D : public A
{
public:
D(const string &val) {}
using A::A; // g++ error: A::A names constructor
};
void main()
{
B b(10); // Ok. (A::A constructor is not overlapped)
C c(10); // error: no matching function to call to 'C::C(int)'
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:在声明了继承类中的新构造函数后,有没有办法导入基类构造函数?
或者只有一个替代方法来声明新构造函数并从初始化列表中调用基础构造函数?
在iOS项目中使用新的自动引用计数(ARC)内存管理方式有哪些优缺点?
使用iOS 5.0 SDK进行开发时,您可以选择不使用ARC吗?
您是否为新项目推荐ARC或手动引用计数(MRC)?
使用ARC的应用程序是否能够在比iOS 5.0更旧的操作系统版本上运行?
我知道当我们想要创建一个未知值对象时,我们使用id.但是,我很好奇为什么Apple选择id在运行时决定它的值,当每个对象都是NSObject的子类时.所以id delegate
我们可以使用而NSObject *delegate
不是有人知道为什么吗?谢谢.
关于子类化a的堆栈溢出问了几个问题UIButton
,有几个人告诉我我不应该继承a UIButton
.
子类化的负面因素是UIButton
什么?而且我知道它含糊不清,但是继承子类的其他选择是UIButton
什么?
我在两个编译器上进行了测试,并且惊讶地看到它们都支持以下定义而没有抱怨:
class A {
A();
};
A::A::A() {}
^^^
Run Code Online (Sandbox Code Playgroud)
请注意,这也适用于方法,尽管在声明过度限定时会对其进行标记.
问题:
更新细节:
如果原始问题不明确或太短:我很好奇为什么在定义上允许多余的资格(重点也在上面添加).
Clang和Apple的GCC 4.2 + LLVM是编译器
这是一个新手C/Objective-C问题:-)
假设我想要一个CGRectOne和一个CGRectTwo常量.
我该怎么说呢?
谢谢,Jérémy
我有一个看起来像这样的遗留函数:
int Random() const
{
return var_ ? 4 : 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要在遗留代码中调用一个函数,以便它现在看起来像这样:
int Random() const
{
return var_ ? newCall(4) : 0;
}
Run Code Online (Sandbox Code Playgroud)
问题是我收到了这个错误:
In member function 'virtual int Random() const':
class.cc:145: error: passing 'const int' as 'this' argument of 'int newCall(int)' discards qualifiers
Run Code Online (Sandbox Code Playgroud)
现在我知道为了解决这个错误我可以使我newCall()
的const函数.但后来我有几个newCall()
函数调用,所以现在我必须使所有这些函数调用const.等等,直到最后我觉得我的程序的一半将是const.
我的问题:有没有办法在Random()中调用一个不是const的函数?或者有没有任何想法如何实现newCall()
内部Random()
而不使我的程序const的一半.
谢谢
-josh
在我的init方法中使用点表示法将retain属性初始化为nil是不是一个坏主意?
对于像这样的普通房产:
@property (nonatomic, retain) id foo;
Run Code Online (Sandbox Code Playgroud)
在我设置的init方法中说self.foo = nil
.合成的方法首先释放或自动释放foo
(不完全确定潜在的实施).被foo
guaranted第一setter或getter调用之前是零?或者它会指向随机垃圾,除非我明确设置foo = nil
没有点符号?
initialization properties reference-counting objective-c dealloc
我很好奇为什么像CGRectMake和CGPointMake这样的函数存在并被广泛使用.相反,你可以这样做:
(CGRect){{x, y}, {width, height}}
Run Code Online (Sandbox Code Playgroud)
肯定这是更有效的(虽然我猜不多)因为没有函数调用?
您还可以设置原点和大小,如:
(CGRect){origin, size}
Run Code Online (Sandbox Code Playgroud)
并作为混合物:
(CGRect){origin, {width, height}}
Run Code Online (Sandbox Code Playgroud)
不使用它的原因是什么,更喜欢Make功能?
iphone cocoa-touch core-graphics objective-c compound-literals
objective-c ×6
c++ ×3
ios ×2
ios5 ×2
iphone ×2
c++11 ×1
class ×1
cocoa ×1
cocoa-touch ×1
const ×1
const-cast ×1
constants ×1
constructor ×1
dealloc ×1
definition ×1
extern ×1
function ×1
inheritance ×1
polymorphism ×1
properties ×1
scope ×1
static ×1
struct ×1
subclass ×1
types ×1
uibutton ×1
uikit ×1