SomeObject *temp = [[SomeObject alloc] init]
self.theObject = temp;
[temp release];
Run Code Online (Sandbox Code Playgroud)
为什么总是这样做?为什么不
self.theObject = [[SomeObject alloc] init];
Run Code Online (Sandbox Code Playgroud) 我正在学习为iPhone开发(以编程方式,我不喜欢IB).我只使用IB作为帧的东西,所以我在IB中设计但只用它来检查每个控件的帧.我非常困惑的是UIView的框架.首先,如果你没有在视图控制器中实现loadView,它会自动创建一个空的UIView(我注意到它的黑色)并将其分配给self.view,对吗?框架怎么样?它会自动找出框架应该是什么吗?我的意思是,它需要有所不同,具体取决于是否有状态栏,是否有标签栏,工具栏,方向.在我的标签栏应用程序中,似乎无论我设置的uiview框架是什么,它看起来仍然很好.而且,UIView的框架似乎在IB中搞砸了.就像UIView占据整个窗口(状态栏除外)的y值是0,当它应该是20时,因为状态栏占据前20个像素.在IB中,标签栏控制器中的视图的值为411,即使它始于状态栏下方.每当我NSLog一帧(四个数字,view.frame.origin.x,view.frame ......等),x,y,宽度和高度总是为0 ..可以理解它的人请解释它我?谢谢!!
好的,这很奇怪......这个:
CGRect test = CGRectMake(0, 20, 320, 460);
NSLog(@"%d %d %d %d", test.origin.x, test.origin.y, CGRectGetWidth(test), CGRectGetHeight(test));
Run Code Online (Sandbox Code Playgroud)
给出输出:
0 0 0 1077149696
Run Code Online (Sandbox Code Playgroud)
??? 那是什么?
我有一个简单的程序(这是CCC 2012上的第二个问题),它取一个数字列表,并确定是否有任何严格增加/减少/不变的序列正在进行.例如:
1 2 3 4 7 8 => Increasing
5 1 -2 -100 => Decreasing
9 9 9 9 9 9 => Constant
1 2 3 4 5 0 => Nothing
Run Code Online (Sandbox Code Playgroud)
当我对此进行编码时,我对Haskell的智能程度感到震惊.出于某种原因,当我以交互方式输入数字到stdin时,在我完成之前就给了我答案!我认为这是一个错误,但后来我愚蠢地意识到,Haskell的懒惰(我想?)正在采取独自去决定,之后我进入1,2,3,0,不管以后有什么来了,结果将是Nothing,所以它高兴地输出那个.
不幸的是,当我改变时
let readings = map (read :: (Read a, Num a) => String -> a) $ lines input
Run Code Online (Sandbox Code Playgroud)
至
let readings = parse $ lines input
Run Code Online (Sandbox Code Playgroud)
与parse被读取数字输入一个更安全的方法,实现为
maybeRead :: (Read a) => String …Run Code Online (Sandbox Code Playgroud) parsing haskell functional-programming input lazy-evaluation
data Vector a = Vector a a a deriving (Eq, Show)
instance Functor Vector where
fmap f (Vector x y z) = Vector (f x) (f y) (f z)
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
instance Num ((Num a) => Vector a) where
negate = fmap negate
Run Code Online (Sandbox Code Playgroud)
不行.我在第一行尝试了很多不同的变化,但GHC一直在抱怨.我想制作一个Vector包含数字的实例Num; 当然这应该是可能的吗?否则,我将不得不作出一个实例Int,Integer,Float,Double,等全部用相同的定义.
我开始在objective-c中更好地理解内存管理,但有些东西我不明白.这是一个属性声明:
@property (nonatomic, retain)UILabel *myLabel;
Run Code Online (Sandbox Code Playgroud)
这是它看不见的合成二传手(我认为):
- (void)setMyLabel:(UILabel *)newValue {
if(myLabel != newValue) {
[myLabel release];
myLabel = [newValue retain];
}
}
Run Code Online (Sandbox Code Playgroud)
这节省了你每次保留和填充的所有工作,但是说我第一次设置我的属性,它还没有被分配,所以它的引用数是0,对吧?所以我这样做
UILabel *tempLabel = [[UILabel alloc] init];
self.myLabel = tempLabel;
[tempLabel release];
Run Code Online (Sandbox Code Playgroud)
我不确定那里会发生什么,什么时候什么也没发布,但是说这个属性已经有了值,我们设置了它.在setter中,首先它被释放.那不是让它消失吗?如果它的引用计数是1,然后在它发布的setter中,它如何保持设置为保留的新值?
谢谢!!
我应该如何命名我的班级,以CAD /美元的价格存储成本/价格/金额作为单独long的美元和美分?我有"PriceInDollars",但我不是那么喜欢,而且我总是忘记它.有任何想法吗?
编辑:显然我应该使用BigDecimal,而不是重新发明轮子.我想我会用它.尽管如此,我确实学到了很多东西.
请在这里查看我的其他问题!
我知道CGFloat应该在Cocoa应用程序中使用,以使它们64位清理.但是在一个简单的OpenGL游戏中,使用Cocoa/Objective-C进行除渲染之外的所有事情(对于NSOpenGLView)呢?CGFloat是Core Graphics的一部分,所以如果我也可以使用CGPoint,CGRect等?或者我应该自己写一些rects和vector以及那种东西?
基本上可以将OpenGL与CoreGraphics类型混合使用吗?